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

@echooffseta=1setdst=1setlocalenabledelayedexpansionfor/f"delims="%%iin(a.txt)do(setn... @echo off
set a=1
set dst=1
setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
set num=%%i
if "!a!"=="1" (echo !num!>b.txt&set a=)
if not !num!==!dst! (call :dd)
for /f "delims=" %%j in (c.txt) do (
set dst=!num!
set var=%%j
if "!num!"=="!var!" set lis=y
)
)
start b.txt
:dd
if "%dst%"=="1" goto :eof
if not "%lis%"=="y" (echo %dst%>>b.txt) else (set lis=)
goto :eof
这段代码的名字是删除txt文件中重复的行.bat 你说能行不???能删除下面重复的行吗?
比如: 12345
12346
12347
1234567
12346
12345
12345678
123456789
1234567890
展开
 我来答
四季守望
2012-10-20 · TA获得超过6127个赞
知道小有建树答主
回答量:1216
采纳率:57%
帮助的人:494万
展开全部

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

  这个批处理的原理就是将a.txt逐行读出,从第一行开始判断是否与b.txt的某行相同,如果没有相同的行就写到b.txt,如果有相同的行就继续读a.txt的下一行。用!a!来指示首行直接写入b.txt覆盖原内容。


  这个批处理的代码不合理,有些是没用的。比如用!a!标记是否为第一行(可以用cd.>b.txt清空原内容,这样第一行就不用特殊处理);用!lis!标记是否存在相同行(这个可以不标记,退出循环即可)。set dst=!num!这句放在第二个循环里无意义。批处理中还有个问题:如果是删除一个txt里的重复行,那么代码中“c.txt”应该是"b.txt"

  删重复行不用这么麻烦的。下面是我给简化的,原理没变,只是去掉了无用的部分。


  1. @echo off

  2. cd.>b.txt

  3. for /f "delims=" %%z in (a.txt) do call :check %%z

  4. start b.txt

  5. pause

  6. goto:eof

  7. :check

  8. for /f "delims=" %%y in (b.txt) do if %%y==%1 exit /b

  9. echo,%1>>b.txt

  10. exit /b 


  对应行解释:

  1. 关闭回显

  2. 生成空文件 b.txt

  3. 循环取a.txt中的每行,并以其为参数调用 :check

  4. 打开文本b.txt

  5. 暂停

  6. 跳到结尾(运行结束)

  7. 标签:check (此处可以理解成子程序)

  8. 循环读b.txt中各行,并判读是否与:check的第一个参数相同,如果相同就结束call返回到调用处,(如果b.txt中所有行都不与该参数的内容相同就继续下行。)

  9. 将:check的第一个参数写到b.txt

  10. 结束call 返回到调用处。 

匿名用户
2012-10-21
展开全部
清空答案
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式