【问题标题】:Rename a file by replacing few characters using Batch script通过使用批处理脚本替换几个字符来重命名文件
【发布时间】:2021-01-21 00:13:34
【问题描述】:

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

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”。尝试 % 围绕 Pattern & replace 变量,但没有运气。不知道我哪里错了。尝试了 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.

【问题讨论】:

    标签: batch-file batch-processing batch-rename


    【解决方案1】:

    这里有三个问题。

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

    【讨论】:

    • 谢谢,@Gerhard...这是一个完美的解决方案,完美的解释...:)
    • 如果我的文件名包含完整路径怎么办。例如C:/test/My_File_20201006.txt
    • @Gerhard...脚本的工作目录不同...因此,如果我尝试添加文件的相对路径,则会出现语法错误...不知道为什么.. .
    • 不幸的是,无法按照我的用例拖动文件。我收到“%~dp1%filename:statement_=%”或“%~dp1!filename:%Pattern%=%Replace%!”的语法错误。
    • 百万感谢@Gerhrad...解决方案很完美...
    猜你喜欢
    • 1970-01-01
    • 2013-04-14
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    相关资源
    最近更新 更多