使用批处理文件识别丢失的文件并按顺序重命名文件

时间:2015-06-05 12:56:47

标签: batch-file

我在文件夹中有一系列文件,例如。 1,2,5,6,7,8,10,11,12,15,16,17。它们都具有.mp4文件扩展名。我希望通过顺序重命名文件,按顺序排列文件夹中的文件列表,没有丢失的数字。任何帮助非常感谢。

2 个答案:

答案 0 :(得分:1)

最棘手的部分是按数字顺序对文件进行排序。问题是DIR和SORT命令都会按字母顺序对文件名进行排序,因此10将在9之前排序。不是你想要的。

使用纯批处理可以相当轻松地解决这个问题,但我有一个更好的解决方案:JSORT.BAT是一个混合JScript /批处理实用程序,可以用数字排序名称。它是纯脚本,可​​以在XP以后的任何Windows机器上本机运行。

使用JSORT.BAT,解决方案非常简单:

@echo off
pushd "c:\yourFolder"
ren *.mp4 *?.save
for /f "tokens=1* delims=:" %%A in (
  'dir /b *.mp4.save^|jsort /n^|findstr /n "^"'
) do ren "%%B" "%%A.mp4"
popd

第一个REN将.save附加到所有.mp4文件的末尾(1.mp4变为1.mp4.save),以便最终重命名没有任何名称冲突。

真正的魔力在于FOR / F循环。

  • DIR / B只列出文件,顺序无关紧要
  • JSORT / N以数字方式对列表进行排序
  • FINDSTR / N“^”为每一行添加一个linenumber:前缀。行号是所需的新名称

FOR / F将每一行解析为行号(新名称)和现有文件名。其余的很容易。

答案 1 :(得分:1)

@echo off
setlocal EnableDelayedExpansion

rem Get file names and sort them
cd "C:\FolderOfFiles"
for %%a in (*.mp4) do set "i=00%%~Na" & set "num[!i:~-3!]=%%a"

rem Rename the files in the proper order
set i=0
for /F "tokens=2 delims==" %%a in ('set num[') do set /A "i+=1" & ren "%%a" "!i!.mp4"

如果您想在新名称中插入左边的零以便在dirfor列表中保留相同的顺序,请将此部分替换为最后一部分:

rem Rename the files in the proper order
set i=1000
for /F "tokens=2 delims==" %%a in ('set num[') do set /A "i+=1" & ren "%%a" "!i:~-3!.mp4"