批量删除文件名中特定字符之后的文本

时间:2016-11-22 17:29:39

标签: windows batch-file command-prompt file-rename batch-rename

我有这种文件命名系统

CR - 计划 - Grundriss_RO_STA_MA_C7_TS_0001_01_F - 计划Nord.pdf

我希望有一个.bat文件,可以删除之前和之后的部分并将文件名更改为

Grundriss_RO_STA_MA_C7_TS_0001_01_F.pdf

之前和之后的部件并不总是具有相同的长度!

如果你能提供帮助,我将非常感激!非常感谢你。

1 个答案:

答案 0 :(得分:2)

您可以将此代码复制到保存到目录中的批处理文件中,并重命名文件。

@echo off
for /F "delims=" %%I in ('dir /A-D /B *-*-* 2^>nul') do (
    for /F "tokens=3 delims=- " %%J in ("%%~nI") do ren "%%I" "%%J%%~xI"
)

我建议在命令 REN 左侧插入命令 ECHO ,并在命令提示符窗口中运行批处理文件,当前目录是包含要重命名为的文件的目录首先验证文件是否会按预期重命名。如果一切正常,请使用发布的代码运行批处理文件。

外部 FOR 循环运行 DIR 以获取文件名列表,因为参数/A-D(无目录)和/B (裸输出格式)文件名中至少有两个破折号的文件。 "delims="禁用默认情况下将 DIR 的每个输出行拆分为字符串,并使用空格和水平制表符作为分隔符。

内部的 FOR 循环只处理每个文件的名称,而双引号中没有用%%~nI引用的文件扩展名。对此任务感兴趣的只是在两个空格和破折号序列之后的文件名的第三部分。这就是"tokens=3 delims=- "

的原因

命令 REN DIR 返回的当前文件重命名为仅使用%%~xI引用的第三部分和原始文件扩展名。

在引用文件名的任何地方都必须使用双引号,因为文件名包含空格。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • dir /?
  • echo /?
  • for /?
  • ren /?

2^>nul重定向错误消息输出命令 DIR 以处理 STDERR ,以防文件与设备找到的模式*-*-*无匹配 NUL 来压制它。必须使用>对重定向运算符^进行转义,以便在执行命令 DIR 时将其解释为重定向运算符,而不是作为命令 FOR 。另请参阅Microsoft文章Using command redirection operators