搜索和替换文件名 - 错误修复

时间:2012-12-04 11:45:27

标签: batch-file vbscript batch-rename

我有一个脚本可以更改文件名中的特定字符串(文件存储在“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

我会很感激以这种方式提供快速帮助。 感谢。

1 个答案:

答案 0 :(得分:0)

我没有费心去试图找出你的VBScript出错的地方。但您使用batch-filebatchbatch-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?