楼上热心网友解释的很详细.
这个批处理的原理就是将a.txt逐行读出,从第一行开始判断是否与b.txt的某行相同,如果没有相同的行就写到b.txt,如果有相同的行就继续读a.txt的下一行.用!a!来指示首行直接写入b.txt覆盖原内容.
这个批处理的代码不合理,有些是没用的.比如用!a!标记是否为第一行(可以用cd.>b.txt清空原内容,这样第一行就不用特殊处理);用!lis!标记是否存在相同行(这个可以不标记,退出循环即可).set dst=!num!这句放在第二个循环里无意义.批处理中还有个问题:如果是删除一个txt里的重复行,那么代码中“c.txt”应该是"b.txt"
删重复行不用这么麻烦的.下面是我给简化的,原理没变,只是去掉了无用的部分.
@echo off
cd.>b.txt
for /f "delims=" %%z in (a.txt) do call :check %%z
start b.txt
pause
goto:eof
:check
for /f "delims=" %%y in (b.txt) do if %%y==%1 exit /b
echo,%1>>b.txt
exit /b
对应行解释:
关闭回显
生成空文件 b.txt
循环取a.txt中的每行,并以其为参数调用 :check
打开文本b.txt
暂停
跳到结尾(运行结束)
标签:check (此处可以理解成子程序)
循环读b.txt中各行,并判读是否与:check的第一个参数相同,如果相同就结束call返回到调用处,(如果b.txt中所有行都不与该参数的内容相同就继续下行.)
将:check的第一个参数写到b.txt
结束call 返回到调用处.