Board logo

标题: [文件操作] 批处理遍历文件夹时文件排序问题? [打印本页]

作者: li_zhicheng    时间: 2023-12-12 09:10     标题: 批处理遍历文件夹时文件排序问题?

我要遍历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. )
复制代码
感谢!
作者: hfxiang    时间: 2023-12-12 09:26

回复 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]]}"
复制代码

作者: ShowCode    时间: 2023-12-12 09:36

回复 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
复制代码

作者: qixiaobin0715    时间: 2023-12-12 10:50

回复 1# li_zhicheng
最好把你的真实需求说明白。也有可能不按顺序排列就能实现目的呢。
作者: aloha20200628    时间: 2023-12-13 14:33

本帖最后由 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)
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2