0

我已经问过有关 DOS 中的级联命令的其他问题,但显然我对要考虑的全部内容还没有那么自信。

有人可以看一下我系统上的以下代码和输出,看看他们是否可以建议什么语法是错误的(注意,我已经手动断行了):

%comspec% /v:on /k "(for /f "tokens=2*" %a in ('reg query hkcu\software\microsoft
\windows\currentversion\policies\system /v DisableTaskMgr') do @set DisableTaskMg
r=%b) 2>nul & set DisableTaskMgr& pause & (if defined programfiles^(x86^) (set
"ProgramFiles(x32)=%programfiles(x86)%") else (set "ProgramFiles(x32)=%programfil
es%")) & !ProgramFiles(x32)!\Mozilla\Firefox\Firefox.exe -chrome chrome://browser
/content & echo. & if defined DisableTaskMgr (echo DisableTaskMgr reg key existed
prior to running, and... & (set DisableTaskMgr=%DisableTaskMgr:~2,3% & echo !
DisableTaskMgr! & reg add hkcu\software\microsoft\windows\currentversion\policies
\system /v DisableTaskMgr /t REG_DWORD /d %DisableTaskMgr% & if %DisableTaskMgr%
eql 0 (echo Previous state was Task Manager enabled) else (echo Previous state
was Task Manager DISabled))) else (echo DisableTaskMgr reg key DID NOT exist pri
or to running & reg delete hkcu\software\microsoft\windows\currentversion\polici
es\system /v DisableTaskMgr /f)"

.
在此处输入图像描述

我曾尝试删除部分代码以修复个别部分,但我尝试和错误的尝试证明我不知道什么是错误的,而且我不会自己解决这个问题非常快 :(

在此处输入图像描述

4

2 回答 2

1

您的 IF 比较运算符是错误的。你有eql- 它应该是equ

我不知道这是否是你唯一的问题——你对那个声明的野兽有一个可怕的维护问题。

您最好创建一个具有相同逻辑但格式良好的批处理文件。然后,您可以简单地调用批处理文件,而不是尝试将整个复杂过程嵌入为一个复杂的命令。

于 2012-09-13T21:37:06.797 回答
0

我可以在这里看到你的问题!这是你的代码!*咧嘴*

说真的,即使您打算保持这种混乱状态,我还是建议将其拆分为组成组件以进行调试。您甚至可以通过将()块内的内容放入单独的子例程中来避免有时神秘的块错误。转这种东西...

if statement (
  code block 1
  code block 1
  code block 1
  code block 1
) else if (
  code block 2
  code block 2
  code block 2
  code block 2
)

...进入这种事情:

if statement (
  call :CodeBlock1
) else if (
  call :CodeBlock2
)
goto :eof

:CodeBlock1
  code
  code
  code
  code
goto :eof

:CodeBlock2
  code
  code
  code
  code
goto :eof

尝试将其作为单行进行调试意味着始终牢记整个事物及其交互方式。并且基本上不得不猜测哪个看起来相似的代码实际上创建了您要修复的错误。

我个人浪费了很多时间来尝试修复完美的代码,而没有意识到我正在查看的错误实际上在代码块的更下方。

找到并修复错误后,如果您愿意,可以再次将其全部塞回一行。克服挑战并不一定意味着要以最艰难的方式去做。根据定义,克服挑战最简单的方法也是克服挑战。

于 2012-09-17T09:00:09.647 回答