0

我有一个脚本可以更改文件名中的特定字符串(文件存储在“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 文件夹”下没有文件夹,则脚本可以正常工作,否则,如果“我的文件夹”中有文件夹并且其中一个(或多个)文件夹的名称与某个文件名相似,则脚本导致不需要的结果,例如乘以替换字符串。

例如,如果“我的文件夹”包含:

你好(文件夹)

hello_.epf(文件)

那么脚本最终会将文件名更改为:

hello_v0_1_v0_1._epf(不需要的结果)

我希望结果是:

你好_v0_1._epf

我会以这种方式感谢快速帮助。谢谢。

4

1 回答 1

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,然后添加新版本号,最后附加原始扩展名。

请参阅Windows RENAME 命令如何解释通配符?有关 REN 如何使用通配符的规则。

于 2012-12-04T15:03:44.663 回答