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

Batch file 搜索和替换文件名-错误修复,batch-file,vbscript,batch-rename,Batch File,Vbscript,Batch Rename,我有一个脚本,可以更改文件名中的特定字符串(文件存储在“我的文件夹”中): Set objFso=CreateObject(“Scripting.FileSystemObject”) Set Folder=objFSO.GetFolder(“g:\my Folder”) 对于文件夹.Files中的每个文件 sNewFile=File.Name sNewFile=替换(sNewFile,“.\u epf”、“\u v0\u 1.\u epf”) 如果是(sNewFileFile.Name),则 F

我有一个脚本,可以更改文件名中的特定字符串(文件存储在“我的文件夹”中):

Set objFso=CreateObject(“Scripting.FileSystemObject”)
Set Folder=objFSO.GetFolder(“g:\my Folder”)
对于文件夹.Files中的每个文件
sNewFile=File.Name
sNewFile=替换(sNewFile,“.\u epf”、“\u v0\u 1.\u epf”)
如果是(sNewFileFile.Name),则
File.Move(File.ParentFolder+“\”+sNewFile)
如果结束
下一个
如果“g:\my folder”下没有文件夹,则scrpit可以正常工作,否则,如果“my folder”中有文件夹,并且其中一个(或多个)文件夹的名称与某个文件名相似,则scrip会导致不必要的结果,例如乘以替换字符串

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

你好(文件夹)

hello_uwf.epf(文件)

然后脚本将最终将文件名更改为:

你好v0 1 v0 1.epf(意外结果)

我希望结果是:

您好\u v0\u 1.\u epf

我将感谢您以这种方式提供的快速帮助。
谢谢。

我没有费心去想你的VBScript哪里出了问题。但是您用
批处理文件
批处理
批处理重命名
标记了您的问题

下面是一个简单的单行程序,可以从命令提示符运行,它将执行您想要的操作。它甚至不需要批处理脚本

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"
编辑

以上内容将在扩展名之前为每个文件名附加一个新的版本后缀

ren "g:\my folder\*_v0_1._epf" "*v0_2.*"
如果要替换现有版本号,则解决方案更简单。我假设您的版本总是以
\u v
开头,并且
v
永远不会出现在文件扩展名中

ren "g:\my folder\*_v0_1._epf" "*v0_2.*"
上述命令重命名以
\u v0\u 1.\u epf
结尾的所有文件。它保留名称中最后出现的
v
之前的所有字符,然后添加新版本号,最后追加原始扩展名

ren "g:\my folder\*_v0_1._epf" "*v0_2.*"

有关REN如何使用通配符的规则,请参阅。

此解决方案还不够,因为我需要偶尔将“v0_1”重命名为“v0_2”“v0_3”。。。。“v1_0”、“v1_1”。。。等等(结尾提到了文件的版本)。我标记了“批处理文件”,因为批处理中的解决方案也适用(如果vbscript中没有解决方案)。@terminetorx-我看不懂你的心思;)我已经扩展了我的答案来处理你新提出的要求。我在重命名目录的帖子中使用了你的解决方案——我写道:@ren“g:\my folder\%~1.vhd”“%~1_v0_1.vhd”,它也对文件起作用(当我添加扩展名时)。谢谢你,伙计。