Почему уровень ошибки постоянно меняется на 1? - PullRequest
1 голос
/ 09 марта 2020

У меня есть txt-файл, в котором перечислены порты, к которым подключены принтеры, и findstr для его поиска и установки одного или другого, поскольку принтеры по умолчанию на основе строки символов найдены или не найдены в txt файл. Команда для установки принтеров по умолчанию работает нормально вне условия if, но, очевидно, findstr не может найти строку. Что мне здесь не хватает?

Каждый раз, когда я запускаю его, он устанавливает принтер SamsungM в качестве принтера по умолчанию, потому что ERRORLEVEL всегда установлен на 1 после запуска findstr. До этого было установлено значение 0.

Код:

findstr /I "usb001" ports.txt
if %ERRORLEVEL% == 0 (wmic printer where portname="USB001" call setdefaultprinter) else (wmic printer where "PortName like '%%samsungm'" call setdefaultprinter)

Текстовый файл:

PortName              
USB001                
\\ses267827\samsungm  
172.22.41.49          

1 Ответ

1 голос
/ 09 марта 2020
type file.txt | findstr /bi "USB001" && (
    echo wmic printer where portname="USB001" call setdefaultprinter
) || (
    echo wmic printer where "PortName like '%%samsungm'" call setdefaultprinter
)

wmic printer get portname выводит Unicode, поэтому файл будет иметь кодировку UTF16-LE. Попробуйте передать от type file.txt до findstr, чтобы лучше обрабатывать findstr.

Если вы можете просмотреть файл в шестнадцатеричном редакторе, вы можете заметить nuls 00 рядом с каждым символом. Это указание на 2 байта на символ, так что это будет Unicode, так как ANSI равен 1 байту на символ.

Или вы можете передать из wmic:

wmic printer get portname | findstr /bi "USB001" && (
    echo wmic printer where portname="USB001" call setdefaultprinter
) || (
    echo wmic printer where "PortName like '%%samsungm'" call setdefaultprinter
)

, который появляется что findstr нормально обрабатывает поток по каналу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...