通过使用批处理脚本替换几个字符来重命名文件

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_=%"

我从 c​​md 行调用我的脚本为:

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.

这里有三处错误。

  1. 您不能将引号添加为变量值的一部分。它实际上会将它们用作变量的一部分。将变量设置为带有双引号,包括变量名。例如 set Pattern="Test_File" 而不是 set "Pattern=Test_File"
  2. 您从未使用过您设置的变量 ReplacePattern
  3. 您需要 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_=%"