0

次の命名規則のファイルがあります。

RE12356_GJ123456789.DAT

VBS を使用してファイルをコピーせずに、ファイルの名前を RE12356_GJ123456790.DAT に変更する必要があります。つまり、VBS ファイルを実行するたびに 1 ずつインクリメントする必要があります。私を助けてください。ありがとう!

4

2 に答える 2

4

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

カウンターのオーバーフローでコピーする方法は課題として残します。

于 2013-05-13T17:45:29.040 に答える
2

実際にファイルを書き換えるのではなく、ファイルテーブルのエントリを移動するだけの「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"

参照: Name プロパティ (FileSystemObject)

于 2013-05-13T17:44:27.420 に答える