Board logo

标题: [其他] [已解决]批处理中sort命令如何过滤重复行? [打印本页]

作者: zljzsmzzx    时间: 2009-6-12 14:39     标题: [已解决]批处理中sort命令如何过滤重复行?

请高手们帮我分析下这段代码。我想知道其中“sort”的具体功能和用法。
我自己也搜了一点点资料看了一下,是不是这个“sort”命令有不同的版本啊?网上的一篇文章介绍了/u参数,功能是排序好后如果存在相同的多行只显示一行,但我试的时候提示“无效的命令行开关”。我的系统是XP(SP3)。(sort /?这样的回答就请免了)
  1. @echo off
  2. if "%~1"=="" (
  3.    setlocal enabledelayedexpansion
  4.    for /f "tokens=2 delims==" %%a in ('%~s0 h^|sort') do (
  5.       set /a n=n%%6+1
  6.       if !n! equ 1 set /a m+=1&set "m2=00!m!"
  7.       if not exist "第!m2:~-3!部分\" md "第!m2:~-3!部分
  8.       move "%%a" "第!m2:~-3!部分
  9.     )
  10.     pause&exit
  11. )
  12. for %%i in (*) do (
  13.    if not "%~nx0"=="%%~nxi" (
  14.       set "var=000000000000000000000000000000%%i=%%i"
  15.       setlocal enabledelayedexpansion
  16.       (echo !var:~-30!)
  17.       endlocal
  18. ))
  19. goto :EOF
复制代码

[ 本帖最后由 zljzsmzzx 于 2009-6-17 14:29 编辑 ]
作者: Batcher    时间: 2009-6-12 21:26

C:\Test>type a.txt
bathome
bathome
Batcher

C:\Test>type a.txt|sort -u
Batcher
bathome

第三方命令行工具 sort.exe 下载地址:
http://bbs.bathome.net/thread-1114-1-1.html
作者: 随风    时间: 2009-6-12 21:50

可以理解:
相当与 type a.txt | sort
这段代码不过是用内存取代了a.txt 具体代码就是 %0 | sort
而后面的 h 就是为了区分代码运行时是for中的 %0 还是双击运行的。
把 '%~s0 h^|sort' 改为 type a.txt|sort 再把第二个for的echo后面加个 >>a.txt 效果是一样的。
作者: zljzsmzzx    时间: 2009-6-14 19:55     标题: 回复 2楼 的帖子

谢谢。另外我想问一下。系统自带的"sort"的所有功能第三方的都有吗?如果是的话我就把系统自带的给替换掉去了。
作者: zljzsmzzx    时间: 2009-6-14 19:57     标题: 回复 3楼 的帖子

谢谢版主。刚开始我没理解“if "%~1"==""”和“%~s0 h”。现在明白了。
作者: Batcher    时间: 2009-6-14 20:28     标题: 回复 4楼 的帖子

你可以自己看看两者的帮助文档,比较一下便知。
作者: zljzsmzzx    时间: 2009-6-17 14:37     标题: 回复 6楼 的帖子

第三方sort自带的帮助文档是英文的,看不懂啊。




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