バッチファイル:IFおよびELSEステートメントの出力はメニュースクリプト内で逆になります


2

問題If(goto)ステートメントが「Microsoft Windows 7 Professional」に等しい場合、ifステートメントではなくelseステートメントになります。最初のgotoステートメントが選択されると、2番目のgotoステートメントが実行されます。

for /f "skip=1 delims=" %%x in ('wmic /Node: "pc-%cn%" os get caption') do @echo.%%x
if "%%x"=="Microsoft Windows 7 Professional" (goto seven) else (goto ten)

これをリモートコンピューターで実行しています(つまり、/ Nodeを含める)。

バッチファイル全体を次に示します。

@ECHO OFF


:: +++++++++++++++++ ENTER PC +++++++++++++++++++
cls
echo.
echo PC Tasks
echo --------
echo.
set /p "cn=Enter Computer Name Extension: "


:: +++++++++++++++++++ MENU +++++++++++++++++++++
:begin
cls
echo.
echo 1) OS Build Version
echo 2) Exit
echo.
goto option

:option
set /p op=Type option #:
if "%op%"=="1" goto test
if "%op%"=="2" goto exit


:: ++++++++++++++++++++ OPTIONS ++++++++++++++++++++++

:test
:: Check for OS
for /f "skip=1 delims=" %%x in ('wmic /Node: "pc-%cn%" os get caption') do @echo.%%x
if "%%x"=="Microsoft Windows 7 Professional" (goto seven) else (goto ten) 
echo.
pause
goto option

:seven
:: Windows 7 Build Version
systeminfo /s pc-%cn% | findstr /B /C:"OS Name" /C:"OS Version"
echo.
goto option

:ten
:: Windows 10 Build Version
psexec \\pc-%cn% cmd.exe /c Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseId
echo.
goto option

:exit
@exit

助けてくれる人に感謝します。


if elseを複数の行に分割してみてください。参照してください場合-条件付きでコマンドを実行する- WindowsのCMD - SS64.com
DavidPostill

DavidPostillそのウェブサイトに感謝します。これは素晴らしいリソースです。しかし、if elseを複数の行に分割しても機能しませんでした。
cgitech

DavidPostillどうもありがとう。あなたの答えは私に完全なソリューションに近づきました...「複数行にわたってif elseを分割する」。これが最初の部分でした。もう1つの部分は、Namelessoneが考案したもので、Microsoft Windows 7 Professionalから引用符を削除することでした。再度、感謝します。
cgitech

回答:


2

次の構文で動作するようです。Microsoft Windows 7 Professionalの前後の引用符を削除しました。さらに、IF / ELSEを複数行に分割します。

if "%%x"==Microsoft Windows 7 Professional (
goto seven
) else (
goto ten
) 

Namelessoneどうもありがとう。それは完全に機能しました
cgitech
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.