我有一个脚本可以更改文件名中的特定字符串(文件存储在“my_folder”中):
Set objFso = CreateObject("Scripting.FileSystemObject")
Set Folder = objFSO.GetFolder("g:\my folder")
For Each File In Folder.Files
sNewFile = File.Name
sNewFile = Replace(sNewFile,"._epf","_v0_1._epf")
if (sNewFile<>File.Name) then
File.Move(File.ParentFolder+"\"+sNewFile)
end if
Next
如果“g:\ my folder”下没有文件夹,scrpit工作正常,如果“我的文件夹”中有文件夹,并且这些文件夹中的一个(或多个)的名称与某些文件名相似,脚本会导致不需要的结果,例如乘以替换字符串。
例如,如果“我的文件夹”包含:
你好(文件夹)
hello_.epf(file)
然后脚本最终将文件名更改为:
hello_v0_1_v0_1._epf(不需要的结果)
我希望结果是:
hello_v0_1._epf
我会很感激以这种方式提供快速帮助。 感谢。
答案 0 :(得分:0)
我没有费心去试图找出你的VBScript出错的地方。但您使用batch-file
,batch
和batch-rename
标记了您的问题。
这是一个简单的单行程序,可以从命令提示符运行,它可以执行您想要的操作。它甚至不需要批处理脚本。
for %F in ("g:\my folder\*._epf") do @ren "%F" "%~nF_v0_1%~xF"
如果要在批处理脚本中运行命令,则需要将所有百分比加倍。
@echo off
for %%F in ("g:\my folder\*._epf") do ren "%%F" "%%~nF_v0_1%%~xF"
修改强>
以上内容将在扩展名之前为每个文件名添加新版本后缀。
如果要替换现有版本号,则解决方案更加容易。我假设您的版本始终以_v
开头,v
永远不会出现在文件扩展名中。
ren "g:\my folder\*_v0_1._epf" "*v0_2.*"
以上命令重命名以_v0_1._epf
结尾的所有文件。它会在名称中最后一次出现v
时保留所有字符,然后添加新的版本号,最后附加原始扩展名。
有关REN如何使用通配符的规则,请参阅How does the Windows RENAME command interpret wildcards?。