0

我有以下命名约定的文件。

RE12356_GJ123456789.DAT

我需要将文件重命名为 RE12356_GJ123456790.DAT 而不使用 VBS 复制文件,即每次运行 VBS 文件时我都需要增加 1。请帮我。谢谢!

4

2 回答 2

4

FileSystemObject 有一个方法 .GetFile(FileSpec) 返回文件 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

您可以只使用“移动”命令,它实际上不会重写文件,而只会移动文件表中的条目......这本质上是一个“重命名”

如果您不想使用 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"

请参阅:名称属性 (FileSystemObject)

于 2013-05-13T17:44:27.420 回答