Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 识别丢失的文件并使用批处理文件按顺序重命名文件_Batch File - Fatal编程技术网

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

Batch file 识别丢失的文件并使用批处理文件按顺序重命名文件,batch-file,Batch File,我在文件夹中有一系列文件,例如1、2、5、6、7、8、10、11、12、15、16、17。它们都有.mp4文件扩展名。我想通过适当地重命名文件,以文件夹中文件的顺序列表结束,没有丢失的数字。非常感谢您的帮助。最棘手的部分是按数字顺序对文件进行排序。问题是DIR和SORT命令都会按字母顺序对文件名进行排序,因此10会在9之前排序。不是你想要的 使用纯批处理可以相当容易地解决这个问题,但我有一个更好的解决方案:一个混合的JScript/批处理实用程序,可以对名称进行数字排序。它是纯脚本,从XP开始在

我在文件夹中有一系列文件,例如1、2、5、6、7、8、10、11、12、15、16、17。它们都有.mp4文件扩展名。我想通过适当地重命名文件,以文件夹中文件的顺序列表结束,没有丢失的数字。非常感谢您的帮助。

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

使用纯批处理可以相当容易地解决这个问题,但我有一个更好的解决方案:一个混合的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“^”为每行添加行号:前缀。行号是所需的新名称
FOR/F将每行解析为行号(新名称)和现有文件名。剩下的很简单

@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
列表中保持相同的顺序,请将最后一部分替换为该部分:

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"

结果是否会是名为1,2,3,4,5,6,7,8,9,10,11,12、扩展名为.mp4的文件?是的,这是正确的。谢谢,太棒了!工作出色。非常感谢你的支持help@crecy-如果答案完全满足您的问题,请不要忘记接受答案。只需单击答案左上角附近的复选标记。这样做可以让其他人知道问题已经得到了回答,给你2个代表点,给海报15个代表点。每个问题只能接受一个答案。