【问题标题】:Batch script rename file批处理脚本重命名文件
【发布时间】:2017-03-27 14:44:10
【问题描述】:

我有一个名为 xxxxxxx_12345.pdf 的文件,我尝试删除后缀,结果将是 xxxxxxx.pdf。 我尝试了以下操作:

forfiles /S /M *_12545.pdf /C "cmd /c rename @file @fname*.pdf"

但它无法更改文件名。 有人可以帮助解决这个问题吗? 谢谢

【问题讨论】:

  • 如果你真的有一个文件,那么根本就不需要forfiles。

标签: batch-file batch-rename


【解决方案1】:

我确信有一种方法可以使用forfiles 命令完成这项工作,但是,为此使用常规的for 循环会容易得多。

@echo off
pushd %~dp0
setLocal EnableDelayedExpansion

for %%f in (*_12545.pdf) do (
    set "CurrentFileName=%%~nf"
    set "RenameTo=!CurrentFileName:~0,-6!"
    echo.ren !CurrentFileName!%%~xf !RenameTo!%%~xf
)

pause>nul

通过setLocal EnableDelayedExpansion,用户可以使用延迟的环境变量,这将使用户能够使用!variable!而不是%variable%

set "CurrentFileName=%%~nf"

%%~nf 将为您提供不带扩展名的文件名,因此在这种情况下,CurrentFileName 将是 FileName_12545。键入 for /? 以查看语法的完整说明。

set "RenameTo=!CurrentFileName:~0,-6!"

请注意,我使用!variable:~0,-6! 删除后缀。这是String Manipulation。用户正在存储一个长度为 6 的不带后缀的字符串(在本例中为 _12545)。

echo.ren !CurrentFileName!%%~xf !RenameTo!%%~xf

我将echo 放在ren 前面,以便您在实际重命名之前检查。 %%~xf 将返回包含 .(dot) 的文件扩展名。在这种情况下,文件扩展名为 .pdf。

我希望这会有所帮助。

【讨论】:

  • 谢谢老虎,感谢它