DOS在连续命令字符串中延迟扩展

时间:2012-09-13 18:07:01

标签: dos delayedvariableexpansion

我已经在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)"


enter image description here

我已经尝试删除部分代码以修复单个部分,但我尝试反复试验证明我对错误有很多了解,而且我不会得到错误这很快解决了我自己:(

enter image description here

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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

尝试将其作为单行进行调试意味着始终牢记整个事物以及它如何相互作用。并且基本上不得不猜测哪些类似的代码实际上创建了您尝试修复的错误。

我个人浪费了很多时间来尝试修复完美的代码,而没有意识到我所看到的错误实际上是在代码块中进一步下降。

找到并修复错误后,如果愿意,可以将它们全部重新插入一行。克服挑战并不一定意味着尽可能以最难的方式做到这一点。根据定义,克服挑战最简单的方法也是克服挑战。