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

问题描述

我是批处理脚本的新手,需要帮助。 我的文件名和路径是

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.

解决方法

这三件事错了。

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