Пакетный файл: вывод операторов IF и ELSE в сценарии меню инвертируется

564
cgitech

ПРОБЛЕМА . Когда оператор If (goto) равен «Microsoft Windows 7 Professional», он переходит к оператору else, а не к оператору if. Когда выбран первый оператор goto, выполняется второй оператор 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 

Спасибо всем, кто может помочь.

2
Попробуйте разделить if if на несколько строк. См. [Если - Условно выполнить команду - Windows CMD - SS64.com] (https://ss64.com/nt/if.html) DavidPostill 6 лет назад 0
** DavidPostill ** Большое спасибо за этот сайт. Это отличный ресурс. Но разбиение if if на несколько строк не сработало. cgitech 6 лет назад 0
** DavidPostill ** Еще раз спасибо. Ваш ответ приблизил меня к полному решению ... "если разделить на несколько строк". Это была первая часть. Другой частью было то, что Namelessone придумал ... удалить цитаты из Microsoft Windows 7 Professional. Еще раз спасибо. cgitech 6 лет назад 0

1 ответ на вопрос

2
NamelessOne

Кажется, работает со следующим синтаксисом. Я удалил кавычки вокруг Microsoft Windows 7 Professional. И дополнительно разделить IF / ELSE на несколько строк.

if "%%x"==Microsoft Windows 7 Professional ( goto seven ) else ( goto ten )  
** Безымянный ** Большое спасибо. Это работало отлично cgitech 6 лет назад 0

Похожие вопросы