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

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 返回到调用处.