我有以下命名约定的文件。
RE12356_GJ123456789.DAT
我需要将文件重命名为RE12356_GJ123456790.DAT而不使用VBS复制文件,即每次运行VBS文件时我都需要增加1。请帮我。谢谢!
答案 0 :(得分: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
如何复制计数器的溢出作为练习。
答案 1 :(得分: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"