通过使用批处理脚本替换几个字符来重命名文件
Rename a file by replacing few characters using Batch script
我是批处理脚本的新手,需要这里的帮助。
我的文件名和路径是
C:\test\My_Test_File_20201006.txt
我想将其重命名为
C:\test\My_File_20201006.txt
仅使用批处理脚本。我不能在这里使用 PowerShell。
@echo off
set Pattern="Test_File"
set Replace="File"
Rem accepts the filename as cmd line argument
set filename=%1
Rem Update filename
set targetfile=%filename:Pattern=Replace%
Rem Rename the file
Ren %filename% %targetfile%
Exit
使用上面的代码,我的文件被重命名为“File”。尝试围绕模式 % 替换变量,但没有成功。不知道我哪里错了。尝试了 Whosebug 和其他教程中所有可能的解决方案,但 none 有所帮助。
编辑:
提出解决方案后,出现语法错误。代码如下:
@echo off
set "filename=%~nx1"
echo %filename%
echo "%~dp1"
echo "%~dp1%filename:statement_=%"
ren "%~dp1%filename%" "%~dp1%filename:Test_=%"
我从 cmd 行调用我的脚本为:
D:/Test> C:/script/rename.bat C:\test\My_Test_File_20201006.txt
echo 语句正确地打印了文件名、目录和带有目录的文件名。在重命名语句中遇到问题。
输出:
My_Test_File_20201006.txt
"C:\test\"
"C:\test\My_Test_File_20201006.txt"
The syntax of the command is incorrect.
这里有三处错误。
- 您不能将引号添加为变量值的一部分。它实际上会将它们用作变量的一部分。将变量设置为带有双引号,包括变量名。例如
set Pattern="Test_File"
而不是 set "Pattern=Test_File"
- 您从未使用过您设置的变量
Replace
和 Pattern
- 您需要
enabledelayedexpansion
或使用 call
进行替换,因为需要多个 %
。
@echo off
set "Pattern=Test_File"
set "Replace=File"
Rem accepts the filename as cmd line argument
set "filename=%~nx1"
Rem Update filename
setlocal enabledelayedexpansion
ren "%~dp1%filename%" "!filename:%Pattern%=%Replace%!"
另一种方法,因为您只替换了示例中的 Test_
:
@echo off
set "filename=%~nx1"
ren "%~dp1%filename%" "%filename:Test_=%"
编辑
正在根据编辑修复您的示例。
@echo off
set "filename=%~nx1"
echo %filename%
echo "%~dp1"
echo "%~dp1%filename:statement_=%"
ren "%~dp1%filename%" "%filename:Test_=%"
我是批处理脚本的新手,需要这里的帮助。 我的文件名和路径是
C:\test\My_Test_File_20201006.txt
我想将其重命名为
C:\test\My_File_20201006.txt
仅使用批处理脚本。我不能在这里使用 PowerShell。
@echo off
set Pattern="Test_File"
set Replace="File"
Rem accepts the filename as cmd line argument
set filename=%1
Rem Update filename
set targetfile=%filename:Pattern=Replace%
Rem Rename the file
Ren %filename% %targetfile%
Exit
使用上面的代码,我的文件被重命名为“File”。尝试围绕模式 % 替换变量,但没有成功。不知道我哪里错了。尝试了 Whosebug 和其他教程中所有可能的解决方案,但 none 有所帮助。
编辑:
提出解决方案后,出现语法错误。代码如下:
@echo off
set "filename=%~nx1"
echo %filename%
echo "%~dp1"
echo "%~dp1%filename:statement_=%"
ren "%~dp1%filename%" "%~dp1%filename:Test_=%"
我从 cmd 行调用我的脚本为:
D:/Test> C:/script/rename.bat C:\test\My_Test_File_20201006.txt
echo 语句正确地打印了文件名、目录和带有目录的文件名。在重命名语句中遇到问题。
输出:
My_Test_File_20201006.txt
"C:\test\"
"C:\test\My_Test_File_20201006.txt"
The syntax of the command is incorrect.
这里有三处错误。
- 您不能将引号添加为变量值的一部分。它实际上会将它们用作变量的一部分。将变量设置为带有双引号,包括变量名。例如
set Pattern="Test_File"
而不是set "Pattern=Test_File"
- 您从未使用过您设置的变量
Replace
和Pattern
- 您需要
enabledelayedexpansion
或使用call
进行替换,因为需要多个%
。
@echo off
set "Pattern=Test_File"
set "Replace=File"
Rem accepts the filename as cmd line argument
set "filename=%~nx1"
Rem Update filename
setlocal enabledelayedexpansion
ren "%~dp1%filename%" "!filename:%Pattern%=%Replace%!"
另一种方法,因为您只替换了示例中的 Test_
:
@echo off
set "filename=%~nx1"
ren "%~dp1%filename%" "%filename:Test_=%"
编辑
正在根据编辑修复您的示例。
@echo off
set "filename=%~nx1"
echo %filename%
echo "%~dp1"
echo "%~dp1%filename:statement_=%"
ren "%~dp1%filename%" "%filename:Test_=%"