批处理文件-用前导零枚举文件夹中的jpg图像



我经常要批量重命名文件夹中的图像,使其名称至少由两位数字组成,例如01.jpg02.jpg03.jpg。。。140.jpg

我想使用批处理文件来实现它
我发现了一些代码,但它只是重命名它的前8个图像。

@echo off
set i=1
for %%f in (*.jpg)  do call :renameit "%%f"
goto done
:renameit
IF 1%i% LSS 1000 SET i=0%i%
ren %1 %i%.jpg
set /A i+=1
:done

如果目录中绝对没有1.jpg01.jpg,并且包含*.jpg文件的目录中也从来没有a.jpgb.jpg等,则可以在批处理文件中使用单个命令行来完成此任务。

@for %%I in (?.jpg) do @ren %%I 0%%I

为了使批处理文件更有用,例如将其添加到Send To文件夹中,并通过上下文菜单(右键单击)在包含JPEG图像文件的一个或多个选定目录上使用它,可以扩展它以支持可选的一条或多条文件夹路径作为参数。

@echo off
set "Folder=%CD%"
:NextFolder
if not "%~1" == "" set "Folder=%~f1"
if "%Folder:~-1%" == "" set "Folder=%Folder:~0,-1%"
for %%I in ("%Folder%?.jpg") do ren "%%~fI" "0%%~nxI"
shift
if not "%~1" == "" goto NextFolder
set "Folder="

此批处理文件重命名*.jpg文件,默认情况下仅在当前目录中使用单个字符作为文件名。但是,如果使用1个或多个文件夹路径调用批处理文件(未验证),则批处理文件将重命名所有指定文件夹中的?.jpg文件。

传递到批处理文件的文件夹路径可以是相对路径或绝对路径,末尾可以带有或不带有反斜杠。

为了理解所使用的命令及其工作方式,请打开命令提示符窗口,在那里执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面。

  • echo /?
  • for /?
  • goto /?
  • if /?
  • ren /?
  • set /?
  • shift /?

请注意:批处理文件不是100%防故障的,因为它不会验证文件夹路径或仅以单个字符作为文件名的*.jpg文件,也不会检查是否存在具有新文件名的文件。但是,如果出现错误,则会打印错误消息,就像已经存在具有新名称的文件一样。

@echo off
set i=1
for %%f in (*.jpg)  do call :renameit "%%f"
goto :eof
:renameit
if 1%i% lss 100 (ECHO ren %1 0%i%.jpg) else (ECHO ren %1 %i%.jpg)
set /A i+=1
goto :eof

直接重命名,没有临时变量。如果输出正常,则移除ECHO s。

此答案是stephan 发布的答案的联合

@echo off
set i=1
for %%f in (*.jpg)  do call :renameit "%%f"
goto done
:renameit
IF 1%i% LSS 100 (SET new=0%i%) else (SET new=%i%)
ren %1 %new%.jpg
set /A i+=1
:done

相关内容

最新更新