Board logo

标题: [其他] 批处理dir命令遍历文件怎样按顺序显示? [打印本页]

作者: MantisLin    时间: 2011-10-9 16:20     标题: 批处理dir命令遍历文件怎样按顺序显示?


假设一个文件夹中有 1.txt - 10.txt 这样十个文本文档
那么在CMD里cd进入该文件夹后,执行
  1. dir/b/on
复制代码
的话,可以看到结果
  1. 1.txt
  2. 10.txt
  3. 2.txt
  4. 3.txt
  5. 4.txt
  6. 5.txt
  7. 6.txt
  8. 7.txt
  9. 8.txt
  10. 9.txt
复制代码
可以看到 10.txt 排在第二位,这不符合人类的习惯,要怎么样才能让遍历出来的 10.txt 排在末尾呢?

作者: cjiabing    时间: 2011-10-9 19:03

查看DIR帮助信息,有按顺序排列的
作者: MantisLin    时间: 2011-10-9 19:10

回复 2# cjiabing
DIR的帮助信息早看了,也试过了,没用。
所以才来这里发问的
作者: guaiwu    时间: 2011-10-9 19:48

  1. dir /b /o:n
复制代码

作者: HAT    时间: 2011-10-9 20:12

回复 4# guaiwu


你发帖之前有做过测试吗?
c:\Test>dir /b /o:n *.txt
1.txt
10.txt
2.txt

作者: wc726842270    时间: 2011-10-9 20:37

LZ似乎用自已的思维来认知世界啊,个人的想法不要和集体混作一谈。如果真的有兴趣,就用你自已的能力让它改变。(呵呵,话可能过了点)
作者: MantisLin    时间: 2011-10-9 21:09

本帖最后由 MantisLin 于 2011-10-9 21:11 编辑

回复 6# wc726842270
好吧,就算你说的对吧,但批处理之家不是讨论哲学用的,还是来共同讨论解决办法吧。
作者: MantisLin    时间: 2011-10-9 21:10

回复 4# guaiwu
这位朋友,你的代码不是跟我的提问时用的代码一样的嘛……
作者: applba    时间: 2011-10-9 22:09

本帖最后由 applba 于 2011-10-9 22:21 编辑

就是个排序的问题,要花点心思,论坛还是有很多数字排序的文章……
作者: cjiabing    时间: 2011-10-9 23:33

曾经遇到类似问题,忘记当时怎么搞的了。
  1. C:\>sort F:\雅尼\1.txt  /+5
  2. 2401
  3. 101
  4. 26
  5. 21
  6. 13
  7. 10
  8. 5
  9. 2
  10. 1
复制代码

作者: cjiabing    时间: 2011-10-9 23:34

曾经遇到类似问题,忘记当时怎么搞的了。
  1. C:\>sort F:\雅尼\1.txt  /+5
  2. 2401
  3. 101
  4. 26
  5. 21
  6. 13
  7. 10
  8. 5
  9. 2
  10. 1
复制代码

作者: CrLf    时间: 2011-10-9 23:50

补位再排序(很适合批处理),或者借鉴编程语言的排序思路
作者: MantisLin    时间: 2011-10-10 14:05

sort 命令还真没用过,不知道要怎么和 dir 结合起来,用通道?
  1. sort | dir/b
复制代码
刚刚试过,这样好像不行,怎么用?
作者: QIAOXINGXING    时间: 2011-10-10 14:36

把文件名 改成 01、02、03 ....................
作者: MantisLin    时间: 2011-10-10 17:21

回复 14# QIAOXINGXING
不要改文件名
作者: guaiwu    时间: 2011-10-10 19:32

回复 5# HAT


    或许这个对你有帮助
http://www.bathome.net/thread-13520-1-2.html
作者: garyng    时间: 2011-10-11 14:37

试试看吧:
有临时文件(%temp%\temp.txt)
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. del /q %temp%\temp.txt
  4. for /f %%i in ('dir/b/on') do (
  5. set /p=%%i <nul>>%temp%\temp.txt
  6. )
  7. (set /p str=)<%temp%\temp.txt
  8. for %%b in (%str%) do (
  9.     set str=0000000000%%b
  10.     set .!str:~-10! !random!=%%b
  11. )
  12. for /f "tokens=2 delims==" %%b in ('set .') do echo %%b
  13. pause
复制代码

作者: 545810831    时间: 2011-10-14 09:55

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b /on *.txt') do (
  3. set str=%%~ni
  4. if  "!str:~1,1!"=="" echo !str!%%~xi
  5. )
  6. for /f "delims=" %%i in ('dir /b /on *.txt') do (
  7. set str=%%~ni
  8. if not "!str:~1,1!"=="" echo !str!%%~xi
  9. )
  10. pause
复制代码





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