问题描述
我是批处理脚本的新手,需要帮助。 我的文件名和路径是
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
使用上述代码,我的文件被重命名为“ 文件”。在模式和替换变量周围尝试了%,但是没有运气。不知道我要去哪里错了。尝试了StackOverflow和其他教程中的所有可能解决方案,但没有帮助。
编辑:
@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_=%"