【问题标题】:Rename files with different extensions via Windows batch通过 Windows 批处理重命名具有不同扩展名的文件
【发布时间】:2014-03-22 22:09:08
【问题描述】:

我在这方面花了两天时间,并且几乎查看了我能找到的所有论坛文件。这是场景:

我有成千上万个图像文件:img_123.jpg、img_124.cr2、img_125.mov 等,我需要将它们命名为:64,001.jpg 64,002.cr2 64,003.mov 等等。基本上是重命名文件,同时保持原始扩展名的完整,同时在千位上放置一个逗号。

感谢阅读有关 Stack Overflow 上有用的问答,我能够写一些东西 A)连续重命名文件但没有逗号(64001.jpg 64002.cr2 64003.mov 等);或 B) 仅重命名唯一类型的第一个文件(img_123.jpg 变为 64,001.jpg 就好了,而 img_124.jpg img_125.jpg 等每个都失败,并显示文件名不唯一的错误。

这是我的代码:

【问题讨论】:

  • 在文件名中使用逗号可能是个坏主意,因为它不是 Windows 中短 (8.3) 名称的有效字符。
  • 感谢您的及时回复。我听到了。我的代码中是否有任何东西在将“计数器”增加一时发出危险信号?我知道的不多,但我认为 SET /A 仅用于数值。
  • Magoo:你这个摇滚男!我修复了导致它对目录中的每个文件起作用的位,但你修复了更大的重命名问题,对此我很感激!!!

标签: windows loops batch-file for-loop file-rename


【解决方案1】:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=c:\sourcedir"
SET /a num=64000
FOR /f "delims=" %%a IN (
  'dir /b /a-d "%sourcedir%\*" '
 ) DO (
 IF !num! lss 1000000 (
  SET "newname=!num:~0,-3!,!num:~-3!"
 ) ELSE (
  SET "newname=!num:~0,-6!,!num:~-6,3!,!num:~-3!"
 )
 ECHO REN "%sourcedir%\%%a" "!newname!%%~xa"
 SET /a num+=1
)

GOTO :EOF

您需要做的就是设置sourcedir 以适应您的系统。

所需的 REN 命令仅用于测试目的ECHOed。 验证命令正确后,将ECHO REN 更改为REN 以实际重命名文件。

【讨论】:

  • 哇!你是个天才!!不过,它重命名了文件夹中的所有内容。这不好,但也许我可以通过更改第 6 行(dir 限定符所在的位置)来解决这个问题。说
  • 这是有效的代码:@ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION SET "sourcedir=G:\ch\dos batch tests\# Projects\看看你是否可以插入一个昏迷" SET /p num=enter the下一个更大的数字: FOR /f "delims=" %%a IN ( 'dir *.jpg *.cr2 *.mov /b /a-d "%sourcedir%*.jpg *.cr2 *.mov" ' ) DO ( IF !num!lss 1000000 ( SET "newname=!num:~0,-3!,!num:~-3!" ) ELSE ( SET "newname=!num:~0,-6!,!num:~ -6,3!,!num:~-3!" ) REN "%sourcedir%\%%a" "!newname!%%~xa" SET /a num+=1 ) GOTO :EOF
【解决方案2】:

这就是成功的方法,感谢 Magoo 提出了 95% 的建议。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=G:\ch\dos batch tests\# Projects\see if you can insert a coma"
SET /p num=enter the next higher image number here:  
FOR /f "delims=" %%a IN (
  'dir *.jpg *.cr2 *.mov /b /a-d "%sourcedir%\*.jpg *.cr2 *.mov" '
 ) DO (
 IF !num! lss 1000000 (
  SET "newname=!num:~0,-3!,!num:~-3!"
 ) ELSE (

  SET "newname=!num:~0,-6!,!num:~-6,3!,!num:~-3!"
 )
 REN "%sourcedir%\%%a" "!newname!%%~xa"
 SET /a num+=1
)

GOTO :EOF

【讨论】:

    猜你喜欢
    • 2013-07-13
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 2019-10-18
    • 2012-12-10
    • 2013-03-13
    • 1970-01-01
    相关资源
    最近更新 更多