Windows CMD пакет 'if' проверка строки оператора иногда работает с учетом регистра - PullRequest
1 голос
/ 13 января 2020

У меня есть простая проверка CMD «если»:

set param=%9
IF %param%=="true" ( 
...

параметр приходит от Python и является логическим значением, которое может быть True или False и которое str преобразованная версия снова начинается с верхнего регистра: "True" или "False" Проблема здесь в том, что когда я запускаю упомянутый сценарий CMD как Windows командный файл на моем P C, он работает, несмотря на разницу в регистре и отсутствие кавычек, но на другом P C он работает, только если я добавляю кавычки и пишу в верхнем регистре "True":

IF "%param%"=="True" ( 

Единственное отличие, которое я могу найти на моем и другом P C, заключается в том, что мой Windows язык - английский sh, а другой - немецкий. Оба используют Windows 10.

Что может заставить CMD работать по-разному?

1 Ответ

0 голосов
/ 16 января 2020


Итак, почему бы не использовать findstr вместо if:

С findstr проверит, соответствует ли аргумент / параметр %~9 строке Верно / Неверно , и выполнит действия, соответствующие результатам.

@echo off 

echo/%~9|%__APPDIR__%Findstr "True False" >nul && (
if "%%~9"=="True" (set "_str=True") else set "_str=%%~9")
if not "%_str%"=="" echo/%_str% = %~9
  • Ввод с 9-ю аргументами, а затем результаты
Q59717331.cmd 1 2 3 4 5 6 7 8 True
rem :: results ::
%~9 = True

Q59717331.cmd 1 2 3 4 5 6 7 8 False
rem :: results ::
%~9 = False

Q59717331.cmd 1 2 3 4 5 6 7 8 TRUE
rem :: results (no results/no match::

Q59717331.cmd 1 2 3 4 5 6 7 8 FALSE
rem :: results (no results/no match::

Q59717331.cmd 1 2 3 4 5 6 7 8 true
rem :: results (no results/no match::

Q59717331.cmd 1 2 3 4 5 6 7 8 false
rem :: results (no results/no match::
...