求解下面批处理代码的详细注释: 谢谢!
1个回答

楼上热心网友解释的很详细.

这个批处理的原理就是将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 返回到调用处.