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

楼主请学会用 pause 做断点, echo on 开回显, echo %var%,  set var,  rem 怀疑有问题的代码段, ...   这些是基本的批处理调试技能

还有请记住, 我们写任何代码时, 发生得最多的错误, 都是我们自己的错误, 由系统或者语言 BUG 造成的错误只是很小的一部分

TOP

本帖最后由 aa77dd@163.com 于 2016-11-3 23:13 编辑

回复 9# liumtz

楼主你要学的还有细心, 编写代码要有好的编辑习惯, 缩进格式是最基本的, 不细心的习惯: 常拼写错误, 空格一下有, 一下没有; 标签冒号一下有, 一下没有? 如果 CMD 解释器能说话, 它只会对你说: 我已经崩溃了!

你的代码为什么没有缩进格式?

if 后的复合语句前的左括号前 要 有 空格
  1. @echo off
  2. echo ◇◇◇◇◇◇◇◇◇◇
  3. ::Distribuobj,Distribuxwc
  4. ::reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs" /v lpk /t REG_SZ /d "lpk.dll" /f > nul
  5. ::sc config Distribuobj start= disabled > nul
  6. ::net stop Distribuobj > nul
  7. setlocal enabledelayedexpansion
  8. for %%i in (spooler,eventlog) do (
  9.     set exePath=
  10.     for /f "skip=1 delims=" %%a in ('wmic service where Name^="%%i" get PathName') do (
  11.         set exePath=%%a
  12.     )
  13.     echo [!exePath!]
  14.     echo;WatchPoint 20161103_230545
  15.     set exePath
  16.     echo ◇"!exePath!"◇
  17.     if defined exePath (
  18.         if not "!exePath!"=="" call :lis !exePath!
  19.     )
  20. )
  21. ::endlocal
  22. goto :end
  23. :lis
  24. echo "%*"
  25. set exe=
  26. for /f "delims=" %%b in ('echo %*^|findstr /r /i "^%SystemDrive%\\windows\\system32\\.*\.exe$"') do (
  27.     set exe=%%b
  28. )
  29. echo ☆"%exe%"☆
  30. set exePath
  31. pause
  32. if defined exePath (
  33.     echo 断点1
  34.     if not "%exe%"=="" (
  35.         echo 断点2
  36.         ::if not exist %exe%\ del /f /q %exe%
  37.         ::sc delete Distribuobj
  38.     )
  39. )
  40. pause
  41. goto :eof
  42. echo ☆☆☆☆☆☆☆☆☆☆☆
  43. :end
  44. echo.
  45. echo.
  46. echo  LPK已清除完毕,请现在重启电脑,重启后免疫将生效
  47. echo.
  48. echo.
  49. echo ---------------------请按任意键退出该程序或直接关闭此窗口--------------------
  50. pause>nul
复制代码

TOP

本帖最后由 aa77dd@163.com 于 2016-11-3 23:30 编辑

回复 14# liumtz

好编辑器不少
Notepad++ 不错

另外, 好象并没有人以写批处理代码为职业

TOP

回复 12# liumtz

wmic 的输出中, 行结束符可能并不是你想象的情形, 你可以把输出重定向到文件, 看看具体情况

Notepad++ 可以显示不可打印的 ASCII 字符, 包括单个的 CR 或者 LF

有许多命令在 XP 和 WIN7 的表现会有细节的差异, 想要两种环境下都兼容的, 调试时就先想想是不是某命令在两种环境下的差异造成了问题

TOP

楼主看过 ntcmds.chm
没有,没有就开始看,
:: 不是注释头, 只是标签语法符号的异用

TOP

回复 18# liumtz

程序设计语言用的精确语言范式,批处理作为一种胶水语言,相对高级语言[比如PASCAL],其语法范式的规范性差远了,和你认为的正相反,胶水语言通常都是灵活的,灵活的代价有可能牺牲规范性,统一性,微软官方既不开源,又没有给出很深入很完整的语言规范文档--这个造成批处理编写上的一些困难

TOP

返回列表