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

[文本处理] [已解决]批处理如何只对目录的子项按降序排序,而其他项顺序不变?

[复制链接]
 楼主| 发表于 2013-5-27 07:12:28 | 显示全部楼层
谢谢各位高手,喜出望外,提供了这么代码和思路!
测试了一下,十楼以下的四个代码都通过了测试,CrLf 的代码效率最高,gawk效率高的惊人,看来第三方软件,有时也值得一用。CrLf 的纯DOS代码运行也是最快的。
再次表示感谢!
发表于 2013-5-27 17:18:25 | 显示全部楼层
回复 15# xxpinqz


    那是 terse 的绝招,被偷学了,嘿嘿
 楼主| 发表于 2013-5-27 18:41:58 | 显示全部楼层
本帖最后由 pan528 于 2013-5-27 18:45 编辑

按crlf的程序结构,改造了一下我的升序的批命令,效率提高了许多:
  1. @echo off
  2. title 对目录文本按升序排列

  3. if "%~1"=="" goto:Ascending

  4. set File=%~snx1

  5. if exist A%File% del A%File%
  6. echo 正在对文本中的子项按升序排列,请稍候 ...
  7. (for /f "tokens=1* delims=_" %%i in ('%0^|sort') do echo %%j)>A%File%
  8. start A%File%
  9. exit /b

  10. :Ascending
  11. setlocal enabledelayedexpansion
  12. for /f "tokens=1* delims=_" %%i in (%File%) do (
  13.         set m=%%i
  14.         if "!m:~0,1!" == "0" set x=%%i echo !m:~0,10!_%%i_%%j
  15.         echo !x:~0,10!_%%i_%%j
  16. )
  17. endlocal
  18. goto :eof
复制代码
但想请教一下crlf,我没有理解“if "%~1"=="" goto fun”,这段语句,拖拽时,“"%~1"=="" ”是怎么回事?
发表于 2013-5-27 22:09:04 | 显示全部楼层
本帖最后由 xxpinqz 于 2013-5-27 22:23 编辑

  1. @echo off&setlocal enabledelayedexpansion
  2. title 对目录文本按升序排列
  3. if "%~1"=="" goto :eof
  4. set File=%~snx1
  5. (for /f "tokens=1* delims=_" %%i in (%File%) do (
  6.         set m=%%i
  7.         if "!m:~0,1!" == "0" set x=%%i
  8.         echo !x:~0,10!_%%i_%%j
  9. ))>$
  10. echo 正在对文本中的子项按升序排列,请稍候 ...
  11. (for /f "tokens=1* delims=_" %%i in ('sort $') do echo %%j)>A%File%
  12. start A%File%
  13. del $&exit /b
复制代码
你这样理解就很简单了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 07:16 , Processed in 0.016626 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表