バッチスクリプトのif文の条件文でいくつかのリソースをチェックしましたが、これにも間違いはありません。私は通常ここで質問するのは避けてください。これは単純なものでなければなりませんが、巨大なプロジェクトの最後のタスクなので、誰かが私が間違っていることを見るのを助けてくれることを願っています。これは大学のプロジェクトのためのスクリプトであり、単なる概念の探求のためのものです。条件付きIf文の構文バッチ
@Echo OFF
REM Check time remaining
for /f "tokens=3 delims=: " %%a in (
'cscript //nologo "%systemroot%\system32\slmgr.vbs" /dli ^| find "Time remaining: "'
) do set "timeRemainingStatus=%%a"
Echo %timeRemainingStatus%
pause
REM Check SkipRearm dword value
setlocal ENABLEEXTENSIONS
set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform"
set VALUE_NAME=SkipRearm
FOR /F "usebackq skip=2 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
set ValueName=%%A
set ValueType=%%B
set ValueValue=%%C
)
Echo Value Name: %ValueName%
Echo Value Value: %ValueValue%
pause
IF %timeRemainingStatus% EQU 20160 (
Echo First level
pause
IF defined ValueName (
Echo Second Level
pause
IF %ValueValue% == "0x0" (
Echo Third Level
pause
regedit.exe /s "C:\Windows\SR.reg"
)
) ELSE (
Echo Fourth Level
pause
SLMGR /REARM
)
)
pause
私はエコーとポーズがあるので、コードが実行されていることがわかり、変数が値を保持していることを確認できます。 2回目の一時停止後(Echo Value Value:%ValueValue%コマンドの後)にクラッシュします。私はそれが文法に何か間違っていると仮定しますが、私はすべての一時停止にもかかわらず、コマンドプロンプトが閉じるので、エラーを見ることができませんでした。
次のように変更してみましたか? 'IF" x%timeRemainingStatus% "==" x20160 "' – geisterfurz007
応答をありがとう。 xは何をするのですか?あなたの提案の残りの部分を正しく理解していれば、整数比較の代わりに文字列比較をすることをお勧めしますか?将来、このスクリプトは0以下の値をチェックしなければならない可能性があります。文字列比較でどうすればよいか分かりません。 –
xには安全な文字があります。文字列の比較を行うときは、いつも自分のやり方をすることを勧めます。そこに '?'があると、スクリプトがクラッシュする可能性があります。整数比較が必要な場合は、if文の 'set/a timeRemainingStatus =%timeRemainingStatus%'の前にこれを行うことをお勧めします。エラーメッセージが表示されない場合は、Shiftキーを押しながらバッチファイルのディレクトリで右クリックし、[ここでコマンドウィンドウを開く]をクリックして、ファイル名を入力します。ウィンドウが閉じない。 – geisterfurz007