我在文件夹中有一系列文件,例如。 1,2,5,6,7,8,10,11,12,15,16,17。它们都具有.mp4文件扩展名。我希望通过顺序重命名文件,按顺序排列文件夹中的文件列表,没有丢失的数字。任何帮助非常感谢。
答案 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循环。
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"
如果您想在新名称中插入左边的零以便在dir
和for
列表中保留相同的顺序,请将此部分替换为最后一部分:
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"