再把老古董翻出来晒晒吧 :-P
第一眼看到这个题目
下意识就想到用find+sort
后来发现everest79 已经有了类似的解题思路了
东施效颦的事我可不想做
本来就想放弃的
再后来我突然又想起了阔别很久的文物程序fc
也把它翻出来晒晒后
证实思路是可行的- @(for /f "tokens=1* delims=: " %%a in ('fc /lb10000 /n ?.txt %SystemDrive%\io.sys^|find ": "^|sort') do @echo.%%b)>out2.txt
复制代码 比everest79的代码简单一些倒是其次
最关键的是这是一个新的创意
本以为万事大吉
可是再再后来又注意到netbenton与everest79 的对话
发现无论如何也不明白everest79的代码
怎么就避免了netbenton所说的错行问题
因为sort是按文本顺序排序的
而且无法指定排序起始点
不能指定排序停止点
那么文本的内容必然会影响到文本的顺序
试验证实也确实如此
关键糟糕的是
我的代码也存在同样的问题
而且它也把两个文本行首的空格给过滤掉了
于是只好再翻翻doshelp
终于找到解法
用findstr给文本行加个文件名前缀
让sort可以按照我们的规矩“正常排序”
而文本行首的空格也给保留了
虽然使用了临时文件
而且也多了两句代码
但这是没办法的事情
何况效率也没大影响
索性就这样结束了吧- @echo off
- for %%f in (1.txt 2.txt) do findstr $ %%f? > %temp%\~%%~nf.%~n0
- (for /f "tokens=2* delims=:" %%a in ('fc /lb10000 /n %temp%\~*.%~n0 %SystemDrive%\io.sys^|find ": "^|sort') do echo.%%b)>out3.txt
- del %temp%\~*.%~n0
复制代码
|