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

それがあなたの唯一の問題であるかどうかはわかりません-あなたはその声明の獣に恐ろしいメンテナンスの問題を抱えています.

同じロジックで適切にフォーマットされたバッチ ファイルを作成する方がよい場合があります。その後、複雑なプロセス全体を 1 つの複雑なコマンドとして埋め込もうとする代わりに、バッチ ファイルを呼び出すだけで済みます。

于 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

それを 1 行としてデバッグしようとするということは、全体と、それがどのように相互作用するかを常に念頭に置いておくことを意味します。そして、基本的には、修正しようとしているエラーを実際に作成した似たようなコードのビットを推測する必要があります。

私は、私が見ているエラーが実際にはコード ブロックのさらに下にあることに気付かずに、完全に適切なコードを修正しようとしてかなりの時間を個人的に無駄にしました。

エラーを見つけて修正したら、必要に応じてすべてを 1 行にまとめることができます。課題を克服することは、必ずしもそれを可能な限り困難な方法で行うことを意味するわけではありません。最も簡単な方法で課題を克服することは、定義上、課題を克服することでもあります。

于 2012-09-17T09:00:09.647 に答える