标题: [系统相关] 批处理代码中末尾只有一个pause为什么运行完毕后需执行两次“按任意键……” [打印本页]
作者: liumtz 时间: 2016-10-30 19:56 标题: 批处理代码中末尾只有一个pause为什么运行完毕后需执行两次“按任意键……”
本帖最后由 pcl_test 于 2016-10-30 20:23 编辑
自编写的清理某病毒批处理遇到的一个小问题
先贴代码:- @echo off
-
- reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs" /v lpk /t REG_SZ /d "lpk.dll" /f > nul
- sc config Distribuobj start= disabled > nul
- net stop Distribuobj > nul
-
- set exePath=
- for /f "skip=1 delims=" %%a in ('wmic service where Name^="Distribuobj" get PathName') do (
- set exePath=%%a
- )
- echo ◇"%exePath%"◇
- if not defined exePath goto end
- call :lis %exePath%
- :lis
- echo "%*"
-
- set exe=
- 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 (
- set exe=%%b
- )
- echo ☆"%exe%"☆
- if not defined exe goto end
- if exist %exe%\ (goto :eof) else del /f /q %exe%
-
- sc delete Distribuobj
-
- :end
- echo.
- echo.
- echo LPK已清除完毕,请现在重启电脑,重启后免疫将生效!!!
- echo.
- echo.
- echo ---------------------请按任意键退出该程序或直接关闭此窗口!--------------------
- pause>nul
复制代码
代码执行后能达到清理病毒并免疫的效果,但还是有个奇怪的地方,就是要按两次任意键才能退出,但是明明只有一个pause,为什么会执行两次呢?请各位帮忙分析分析,谢谢!
注:测试此代码时小心del命令,有误删文件的风险!
作者: pcl_test 时间: 2016-10-30 20:13
先弄清楚call的作用和执行过程
作者: liumtz 时间: 2016-10-30 21:38
本帖最后由 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
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |