0

プログラミングの無知を失礼します。これがあなたの天才が存在する理由です!

Schedタスクを介して30分ごとに1つのファイルの名前を変更したいと思います。

ファイルリスト:

test1.txt test2.txttest3.txtect。。

Into:test.txt test2.txttext3.txtect。。

test.txtはプログラムによって削除されます。したがって、30分以内に、すべてのファイルが処理されるまで、test2.txtの名前をtest.txtなどに変更したいと思います。

あなたの助けに感謝。見つかった別のファイルの名前を一度に1つずつ、1つのファイル名に変更しますが、ファイルをコピーするだけです。

4

1 に答える 1

2

指定されたベース名を持つファイルが存在するかどうかを確認し、そうでない場合は、ベース名に追加された最小の番号でファイルの名前を変更できます。次のようなことを試してください:

Const basename  = "test"
Const srcFolder = "..."
Const extension = "txt"

Set fso = CreateObject("Scripting.FileSystemObject")

dstFile = fso.BuildPath(srcFolder, basename & "." & extension)

If fso.FileExists(dstFile) Then WScript.Quit 0  'nothing to do

For Each f In fso.GetFolder(srcFolder).Files
  If LCase(fso.GetExtensionName(f.Name)) = extension Then
    If LCase(Left(f.Name, Len(basename))) = basename Then
      num = Mid(fso.GetBaseName(f.Name), Len(basename)+1)
      If Len(num) > 0 Then
        num = CInt(num)
        If IsEmpty(minnum) Or minnum > num Then minnum = num
      End If
    End If
  End If
Next

If Not IsEmpty(minnum) Then
  srcFile = fso.BuildPath(srcFolder, basename & minnum & "." & extension)
  fso.MoveFile srcFile, dstFile
End If

ファイル名と番号のチェックは、正規表現に対してテストすることで少し簡素化できます。

Set re = New RegExp
re.Pattern    = "^" & basename & "(\d+)\." & extension & "$"
re.IgnoreCase = True

For Each f In fso.GetFolder(srcFolder).Files
  Set m = re.Execute(f.Name)
  If m.Count > 0 Then
    num = CInt(m(0).SubMatches(0))
    If IsEmpty(minnum) Or minnum > num Then minnum = num
  End If
Next
于 2013-03-09T12:56:58.220 に答える