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

[文件操作] 批处理如何把文件夹目录下的数字文件名按大小排序?

BAT批处理部分:
  1. for %%i in ("%dir%\*%ext%") do (
  2. set /a n+=1
  3. copy "%%i" "%bakDir%%prefix%!n!%ext%"
  4. echo "%%i ----> %bakDir%%prefix%!n!%ext%"
  5. )
复制代码
在这个for循环里的文件名为1.jpg、2.jpg、3.jpg以此类推有几百个,全是数字的。
读取后默认的排序是按字母来的11.jpg会排在2.jpg前面(windows资源管理器中是按数字大小),如何能按数字大小排序,再进一步操作呢。
dir为目录路径,ext为文件扩展名,都是可自定义输入参数。

以上谢谢大家~

回复 1# roceys


    你确定有循环吗?

TOP

回复 2# wujunkai
我是循环读取指定目录下的文件再复制改名备份

TOP

回复 3# roceys


    按照你的代码来,%%i只会被赋值一次

TOP

先重命名原文件,把位数补齐,比如 001.jpg
又或者把文件名都写入一个临时文件,再把临时文件里的文件名位数补齐,再操作
又或者先把所有文件名都设为变量再排序

TOP

回复 4# wujunkai
代码没变化,我的整个目录文件都输出了,就是排序不对,没写排序算法进去,不太懂bat的排序。

TOP

回复 5# FOR
补齐的方法对文件多的排序还是有问题,要专门写个转换数字的排序,bat上有点麻烦。

TOP

回复 7# roceys

还是用补齐位数的方法
  1. @echo off
  2. set "dir=C:\Users\lenovo\Desktop\0"
  3. set "ext=.jpeg"
  4. set "str=0000000000"
  5. (
  6. for /r "%dir%" %%i in ("*%ext%") do (
  7. set "n=%str%%%~ni"
  8. call echo %%n:~-10%%?%%i
  9. )
  10. ) >"sort.txt"
  11. for /f "tokens=2 delims=?" %%i in ('sort "sort.txt"') do echo %%i
  12. del /f /q sort.txt
  13. pause&exit
复制代码
如果不生成临时文件
  1. @echo off
  2. REM dir
  3. set "dir=C:\Users\lenovo\Desktop\0"
  4. set "ext=.jpeg"
  5. REM ext
  6. set "str=0000000000"
  7. set "code=(for /r "%dir%" %%i in ("*%ext%"^) do @(set "n=%str%%%~ni" ^& call echo %%n:~-10%%?%%i ^)^) ^| sort"
  8. for /f "tokens=2 delims=?" %%a in ('%code%') do (
  9. echo %%a
  10. )
  11. pause&exit
复制代码

TOP

回复 8# went
非常感谢,用第二种不生成临时文件的方法实现了,第一种测试了下如果目录下含有子目录的话,排序时会把子目录文件也加进来。
另外为啥批处理语法里,把这个for循环放在if块里就不会生效,把它单独放代码段里,再到if块里跳转过去才有效?
bat刚入门,还望多指教。

TOP

回复 9# roceys

语句块里面使用变量要开延时

TOP

返回列表