0

原谅我的编程无知。这就是你们天才存在的原因!

我想通过 Sched 任务每 30 分钟重命名一个文件。

文件清单:

test1.txt test2.txt test3.txt 等等

进入:test.txt test2.txt text3.txt 等。

test.txt 将被程序删除。因此,在 30 分钟内,我希望将 test2.txt 重命名为 test.txt,依此类推,直到处理完所有文件。

感谢你的帮助。发现将不同的文件重命名为一个文件名,一次一个,但它只复制文件。

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 回答