批处理脚本重命名文件名的一部分

批处理脚本重命名文件名的一部分

我一直在尝试制作一个脚本,它将改变一个文件名并且只改变其中的一个单词。

例如:

项目名称.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. 重命名 1 个特定文件
  2. 重命名目录中的所有文件
  3. 重命名目录中与特定模式匹配的文件
  4. 还有别的吗?

这是执行#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”(它可以在几个地方找到,因此请确保删除正确的)。

如果您需要对此批处理文件的任何解释,或者它没有执行您真正想要的操作,请告诉我。

相关内容