[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 批处理代码中末尾只有一个pause为什么运行完毕后需执行两次“按任意键……”

本帖最后由 pcl_test 于 2016-10-30 20:23 编辑

自编写的清理某病毒批处理遇到的一个小问题
先贴代码:
  1. @echo off
  2. reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs" /v lpk /t REG_SZ /d "lpk.dll" /f > nul
  3. sc config Distribuobj start= disabled > nul
  4. net stop Distribuobj > nul
  5. set exePath=
  6. for /f "skip=1 delims=" %%a in ('wmic service where Name^="Distribuobj" get PathName') do (
  7. set exePath=%%a
  8. )
  9. echo ◇"%exePath%"◇
  10. if not defined exePath goto end
  11. call :lis %exePath%
  12. :lis
  13. echo "%*"
  14. set exe=
  15. for /f "delims=" %%b in ('echo %*^|findstr /r /i "^%SystemDrive%\\windows\\system32\\[a-z][a-z][a-z][a-z][a-z][a-z]\.exe$"') do (
  16. set exe=%%b
  17. )
  18. echo ☆"%exe%"☆
  19. if not defined exe goto end
  20. if exist %exe%\ (goto :eof) else del /f /q %exe%
  21. sc delete Distribuobj
  22. :end
  23. echo.
  24. echo.
  25. echo  LPK已清除完毕,请现在重启电脑,重启后免疫将生效!!!
  26. echo.
  27. echo.
  28. echo ---------------------请按任意键退出该程序或直接关闭此窗口!--------------------
  29. pause>nul
复制代码
代码执行后能达到清理病毒并免疫的效果,但还是有个奇怪的地方,就是要按两次任意键才能退出,但是明明只有一个pause,为什么会执行两次呢?请各位帮忙分析分析,谢谢!
注:测试此代码时小心del命令,有误删文件的风险!
1

评分人数

本帖最后由 liumtz 于 2016-10-30 21:52 编辑

回复 2# pcl_test


    感谢提醒,看了下CALL的执行过程明白了。。。  在末尾加一个exit就可以直接退出整个批处理了,这样就不会再次执行:lis标签后面的代码了。

修改一下:
... ...
if exist %exe%\ (exit) else del /f /q %exe%
... ...
echo ---------------------请按任意键退出该程序或直接关闭此窗口!--------------------
pause>nul
exit

TOP

先弄清楚call的作用和执行过程

TOP

返回列表