我一直在尝试制作一个脚本,它将改变一个文件名并且只改变其中的一个单词。
例如:
项目名称.vcproj.域名.用户名.用户
到
项目名称.vcproj.其他域名.用户名.用户
我尝试使用 if 循环列出目录并将分隔符设置为句点,但似乎无法识别和更改它。我正在使用重命名 .txt 文件的示例,但似乎不起作用,有什么建议吗?
答案1
您想使用 DOS 字符串替换。
C:\>set proj=projectname.vcproj.domainname.username.user
C:\>echo %proj%
projectname.vcproj.domainname.username.user
C:\>set proj=%proj:domainname=otherdomainname%
C:\>echo %proj%
projectname.vcproj.otherdomainname.username.user
您可以在互联网上搜索“DOS 字符串操作”和“DOS for 循环”来获得更多想法。
http://www.dostips.com/DtTipsStringManipulation.php#Snippets.Replace
答案2
我不确定您是否想要一个批处理文件来执行以下操作:
- 重命名 1 个特定文件
- 重命名目录中的所有文件
- 重命名目录中与特定模式匹配的文件
- 还有别的吗?
这是执行#3(重命名目录中与特定模式匹配的文件)的批处理文件示例。
运行批处理文件以确保它列出了您想要重命名的所有文件。最初,将显示找到的所有文件的旧文件名和新文件名,但不会重命名任何文件。您可能需要修改 searchpattern 的值以显示您想要的文件。列出正确的文件后,按照批处理文件下面的说明进行操作以激活重命名。
@echo off
set "searchfor=domainname"
set "replacewith=otherdomainname"
set "searchpattern=*.%searchfor%.*"
for %%f in ("%searchpattern%") do call :work "%%~f"
set "searchfor="
set "replacewith="
set "searchpattern="
set "filematched="
set "filenewname="
goto :EOF
:work
set filematched=%~1
rem You can't do it directly like:
rem set "filenewname=%filematched:%searchfor%=%replacewith%%"
for /F "usebackq delims=" %%g in (`echo set "filenewname=%%filematched:%searchfor%=%replacewith%%%"`) do %%g
echo Renaming "%filematched%" to "%filenewname%"
rem delete the next line (goto :EOF) to make renaming active
goto :EOF
rem this line actually does the file renaming
ren "%filematched%" "%filenewname%"
goto :EOF
笔记:为了防止重命名错误的文件或以错误的方式重命名文件,批处理文件将显示找到的所有文件的旧文件名和新文件名,但不会重命名任何文件。
运行批处理文件并确信正确的文件将被正确重命名后,您可以编辑该文件以删除所描述的行以使重命名处于活动状态,然后再次运行批处理文件。
为此,找到如下两行:
rem delete the next line (goto :EOF) to make renaming active
goto :EOF
然后,删除“goto :EOF”这一行(或者删除两行)。
不要从批处理文件的任何其他位置删除“goto:EOF”(它可以在几个地方找到,因此请确保删除正确的)。
如果您需要对此批处理文件的任何解释,或者它没有执行您真正想要的操作,请告诉我。