[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理遍历文件夹时文件排序问题?

我要遍历videos文件夹下的所有mp4文件
文件排序是1.mp4 2.mp4 3.mp4 ... 557.mp4
但是遍历的时候,变成了1.mp4 10.mp4 101.mp4 104.mp4 ...
有办法按照我大小排序吗?
我的代码:
  1. @echo off
  2. for %%i in (D:\短视频\shortvideos\*.mp4) do (
  3. echo %%i
  4. )
复制代码
感谢!

回复 1# li_zhicheng

纯整数型文件名排序可借助第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe ):
  1. dir "D:\短视频\shortvideos\*.mp4" /b|gawk -F"." "{a[$1]=$0;b[NR]=$1}END{l=asort(b,c);for(i=1;i<=l;i++)print a[c[i]]}"
复制代码

TOP

回复 1# li_zhicheng
  1. @echo off
  2. for /l %%i in (1,1,1000) do (
  3.     if exist "D:\短视频\shortvideos\%%i.mp4" (
  4.         echo D:\短视频\shortvideos\%%i.mp4
  5.     )
  6. )
  7. pause
复制代码
测试代码之前请做好备份

TOP

回复 1# li_zhicheng
最好把你的真实需求说明白。也有可能不按顺序排列就能实现目的呢。

TOP

本帖最后由 aloha20200628 于 2023-12-13 14:37 编辑


老帖中处理这类问题(数字字符串按纯数值排序),一般归结于先补零位,再丢给sort.exe排序。
但若从本坛第三方下载一个GNU sort.exe 76版 ( http://bcn.bathome.net/tool/7.6/sort.exe ),则可大为简化且效率提高。
例如,针对一楼示例的解法如下》
  1. dir /b "D:\短视频\shortvideos\*.mp4"|sort76.exe -n
复制代码
或在循环体内获取显示
  1. for /f "delims=" %%F in ('dir/b "D:\短视频\shortvideos\*.mp4"^|sort76.exe -n') do (echo,%%F)
复制代码

TOP

返回列表