标题: [文件操作] 批处理如何把文件夹目录下的数字文件名按大小排序? [打印本页]
作者: roceys 时间: 2020-4-10 01:33 标题: 批处理如何把文件夹目录下的数字文件名按大小排序?
BAT批处理部分:- for %%i in ("%dir%\*%ext%") do (
- set /a n+=1
- copy "%%i" "%bakDir%%prefix%!n!%ext%"
- echo "%%i ----> %bakDir%%prefix%!n!%ext%"
- )
复制代码
在这个for循环里的文件名为1.jpg、2.jpg、3.jpg以此类推有几百个,全是数字的。
读取后默认的排序是按字母来的11.jpg会排在2.jpg前面(windows资源管理器中是按数字大小),如何能按数字大小排序,再进一步操作呢。
dir为目录路径,ext为文件扩展名,都是可自定义输入参数。
以上谢谢大家~
作者: wujunkai 时间: 2020-4-10 07:13
回复 1# roceys
你确定有循环吗?
作者: roceys 时间: 2020-4-10 11:56
回复 2# wujunkai
我是循环读取指定目录下的文件再复制改名备份
作者: wujunkai 时间: 2020-4-10 12:48
回复 3# roceys
按照你的代码来,%%i只会被赋值一次
作者: FOR 时间: 2020-4-10 14:25
先重命名原文件,把位数补齐,比如 001.jpg
又或者把文件名都写入一个临时文件,再把临时文件里的文件名位数补齐,再操作
又或者先把所有文件名都设为变量再排序
作者: roceys 时间: 2020-4-11 00:17
回复 4# wujunkai
代码没变化,我的整个目录文件都输出了,就是排序不对,没写排序算法进去,不太懂bat的排序。
作者: roceys 时间: 2020-4-11 00:19
回复 5# FOR
补齐的方法对文件多的排序还是有问题,要专门写个转换数字的排序,bat上有点麻烦。
作者: went 时间: 2020-4-11 10:30
回复 7# roceys
还是用补齐位数的方法- @echo off
- set "dir=C:\Users\lenovo\Desktop\0"
- set "ext=.jpeg"
- set "str=0000000000"
- (
- for /r "%dir%" %%i in ("*%ext%") do (
- set "n=%str%%%~ni"
- call echo %%n:~-10%%?%%i
- )
- ) >"sort.txt"
- for /f "tokens=2 delims=?" %%i in ('sort "sort.txt"') do echo %%i
- del /f /q sort.txt
- pause&exit
复制代码
如果不生成临时文件- @echo off
- REM dir
- set "dir=C:\Users\lenovo\Desktop\0"
- set "ext=.jpeg"
- REM ext
- set "str=0000000000"
- set "code=(for /r "%dir%" %%i in ("*%ext%"^) do @(set "n=%str%%%~ni" ^& call echo %%n:~-10%%?%%i ^)^) ^| sort"
- for /f "tokens=2 delims=?" %%a in ('%code%') do (
- echo %%a
- )
- pause&exit
复制代码
作者: roceys 时间: 2020-4-11 14:44
回复 8# went
非常感谢,用第二种不生成临时文件的方法实现了,第一种测试了下如果目录下含有子目录的话,排序时会把子目录文件也加进来。
另外为啥批处理语法里,把这个for循环放在if块里就不会生效,把它单独放代码段里,再到if块里跳转过去才有效?
bat刚入门,还望多指教。
作者: went 时间: 2020-4-11 20:49
回复 9# roceys
语句块里面使用变量要开延时
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |