Пакетное состояние
Я искал довольно много ответов, и, кажется, не могу найти то, что я ищу, так что извините, если на него уже ответили. Я также никогда не писал здесь, так что извините, если мое форматирование неверно.
Я пытаюсь определить ОС сервера, 2003 или 2008, и запустить команду на основе результата..Bat всегда идет прямо к ":last". Вот что у меня есть -
@echo off
cd\
set output="c:\osout.txt"
del %output%
set /p osinfo=Server?
wmic /node:%osinfo% os get caption > "c:\osout.txt"
findstr "2003" "c:\osout.txt"
IF %ERRORLEVEL% EQU 0 GOTO ver2003
IF %ERRORLEVEL% EQU 1 GOTO next
:next
findstr "2008" "c:\osout.txt"
IF %ERRORLEVEL% EQU 0 GOTO ver2008
IF %ERRORLEVEL% EQU 1 GOTO last
:ver2003
cd\
cls
echo ver2003
pause
:ver2008
cd\
cls
echo ver2008
pause
:last
cd\
cls
echo not 2003 or 2008
pause
3 ответа
wmic
создает выходной файл в формате Unicode, который не поддерживается findstr
, использование find
вместо.
Вы можете проверить кодировку текстового файла, открыв файл в Блокноте и нажав Файл → Сохранить как…. Поле " Кодировка" (внизу по центру диалога " Сохранить как ") показывает фактическую кодировку файла.
Я думаю, что это то, что вам нужно: http://ss64.com/nt/findstr.html Особое внимание уделите параметру "Опции".
Опции могут быть любой комбинацией следующих ключей:
/ I Поиск без учета регистра.
/ S Поиск подпапок.
/ P Пропустить любой файл, содержащий непечатаемые символы.
/ OFF [LINE] Не пропускать файлы с установленным атрибутом OffLine.
/ L Использовать строку (и) поиска буквально.
/ B Сопоставить шаблон, если в начале строки.
/ E Совпадение шаблона, если в конце строки.
/ X Вывести строки, которые точно совпадают.
/ V Печатать только строки, которые НЕ содержат совпадения.
/ N Печатать номер строки перед каждой соответствующей строкой.
/ M Печатать только имя файла, если файл содержит совпадение.
/ O Печатать смещение символа перед каждой соответствующей строкой.
Надеюсь, поможет!