次の命名規則のファイルがあります。
RE12356_GJ123456789.DAT
VBS を使用してファイルをコピーせずに、ファイルの名前を RE12356_GJ123456790.DAT に変更する必要があります。つまり、VBS ファイルを実行するたびに 1 ずつインクリメントする必要があります。私を助けてください。ありがとう!
次の命名規則のファイルがあります。
RE12356_GJ123456789.DAT
VBS を使用してファイルをコピーせずに、ファイルの名前を RE12356_GJ123456790.DAT に変更する必要があります。つまり、VBS ファイルを実行するたびに 1 ずつインクリメントする必要があります。私を助けてください。ありがとう!
FileSystemObject には、ファイル FileSpec のオブジェクトを返すメソッド .GetFile(FileSpec) があります。これらのオブジェクトには (書き込み可能な) .Name プロパティがあります。そのため、.Name を取得して変更し、新しいものを書き込み/割り当てます。
いくつかのアイデアを提供するには(フォルダー内のファイルをループし、変更するファイルを見つけ、インクリメントする数を抽出します):
Option Explicit
Dim goFS : Set goFS = CreateObject( "Scripting.FileSystemObject" )
WScript.Quit demoMain()
Function demoMain()
demoMain = 0 ' assume success
Dim sDDir : sDDir = goFS.GetAbsolutePathName(".\")
Dim reVictim : Set reVictim = New RegExp
reVictim.IgnoreCase = True
reVictim.Pattern = "^(victim)(\d+)(\.txt)$"
Dim oFile
For Each oFile In goFS.GetFolder(sDDir).Files
If reVictim.Test(oFile.Name) Then
WScript.Echo "found: ", oFile.Name
oFile.Name = reVictim.Replace(oFile.Name, GetRef("FINC"))
WScript.Echo "renamed:", oFile.Name
End If
Next
End Function ' demoMain
Function FINC(sM, sG1, sG2, sG3, nP, sS)
FINC = sG1 & Right(100 + sG2 + 1, 2) & sG3
End Function
出力:
cscript finc.vbs
found: victim00.txt
renamed: victim01.txt
cscript finc.vbs
found: victim01.txt
renamed: victim02.txt
cscript finc.vbs
found: victim02.txt
renamed: victim03.txt
カウンターのオーバーフローでコピーする方法は課題として残します。
実際にファイルを書き換えるのではなく、ファイルテーブルのエントリを移動するだけの「move」コマンドを使用できます...これは本質的に「名前の変更」です
filesystemobject.move を使用したくない場合は、Wsript.shell からコマンド ラインの名前変更コマンドを発行できます。
お気に入り...
Dim objShell
Set objShell = WScript.CreateObject ("WScript.shell")
objShell.run "cmd /c rename somefile.txt newname.txt"
Set objShell = Nothing
またはEkkehard.Hornerが指摘したように:
Dim fso, f, s
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(filespec)
f.name = "newFileName.txt"