【问题标题】:Batch Renaming part of a file name in docs command line using REN使用 REN 在 docs 命令行中批量重命名文件名的一部分
【发布时间】:2021-01-18 02:39:33
【问题描述】:

试图弄清楚如何使用 'ren' 在 doc 命令行中批量重命名文件名的一部分。

我的文件名:
abc_124_xyz_2021122345_123.txt
abc_124_xyz_2021122346_124.txt
abc_124_xyz_2021122347_125.txt

如何去掉多余的“2”(上面以粗体突出显示)

我尝试使用“?”:
任 abc_124_xyz_20211?234?-???.txt abc_124_xyz_20211234?-???.txt
和
还尝试使用 '*' 代替 ??? 都没有工作。 出于某种原因,下划线显示为斜体?。所以我用了连字符。 请参阅附带的屏幕截图,其中有下划线。

【问题讨论】:

    标签: cmd command-line file-rename


    【解决方案1】:

    最终使用了 powershell:
    获取子项 *.pdf |重命名项目 -NewName { $_.Name -replace '2021122', '202112' }

    【讨论】:

      【解决方案2】:

      据我所知,Windows 无法将您想要的这种智能重命名 abc$1def$2ghi.txt 重命名为 abcdef$2ghi.txt(去掉第一个字段)。

      无论如何,也许更通用的单个通配符重命名会起作用:

      首先,检查是否包含超出预期的内容:

      dir abc_124_xyz_202112????????.txt
      

      如果没问题,那么运行:

      ren abc_124_xyz_202112????????.txt abc_124_xyz_20211????????.txt
      

      如果不行,您可以 (1) 将文件移动到外部文件夹以单独重命名它们或 (2) 构建一个重命名器脚本,过滤掉特定文件并逐个重命名,通过子字符串版本跳过第 17 个字符:

      1. 辅助文件夹方法:
      md rentemp
      move abc_124_xyz_20211?234?_???.txt rentemp
      ren rentemp\abc_124_xyz_202112????????.txt abc_124_xyz_20211????????.txt
      move rentemp\* .
      rd rentemp
      
      1. 辅助脚本方法:
      for %f in ("abc_124_xyz_20211?234?_???.txt") do (
       set n=%f
       echo ren %n% %n:~0,17%%n:~18% >> renamer.bat
      )
      

      然后运行renamer.bat

      我们需要 renamer.bat,因为如果我们重命名循环中使用的自己的文件,循环本身就会中断,所以下面的脚本不起作用:

      for %f in ("abc_124_xyz_20211?234?_???.txt") do (
       set n=%f
       ren %n% %n:~0,17%%n:~18%
      )
      

      【讨论】:

      • 另一种看待这个问题的方法是删除文件名中的第 n 个字符。任能做到吗?
      • 我已经用你的方法更新了答案
      猜你喜欢
      • 2015-06-05
      • 2018-07-23
      • 2017-03-06
      • 2013-03-24
      • 2019-01-25
      • 2012-06-13
      • 2012-11-15
      • 1970-01-01
      • 2013-01-17
      相关资源
      最近更新 更多