1

Что не так со следующими командными строками для моего пакетного скрипта?

set test=BE99012345678901


if %test% == "BE99????????????"(
echo This number begins with BE99
)
Else (
echo This number doesn't begin with BE99
)
pause

3 ответа3

1

Попробуй это:

set test=BE99012345678901

if "%test:~0,4%"=="BE99" (
echo This number begins with BE99
) else (
echo This number doesn't begin with BE99
)
pause

Вы получите следующий вывод:

This number begins with BE99

Пожалуйста, обратите внимание:

if %test% == "BE99????????????" сделает это:"BE99012345678901" == "BE99????????????"

и это покажет следующий вывод:

This number doesn't begin with BE99

1

Ответ Барлопа охватывает большинство ваших проблем. Следует также отметить, что вам нужно, чтобы ELSE был в той же строке, что и закрывающая скобка для IF . Вот так:

IF "%var%"=="whatever" (
  REM Do stuff
) ELSE (
  REM Do other stuff
)
0

Похоже, вы не можете использовать вопросительный знак или любой подстановочный знак в строке a == b Оператор == не принимает? как особенный, он воспринимает это как буквальное. И это не смотрит на имена файлов. Итак, это просто доказывает, что это действительно нужно? как буквально.

Кроме того, в Linux, если вы сделали эхо? он будет интерпретирован оболочкой перед переходом к команде echo и вернет имя файла длиной в один символ. В винде? или * не интерпретируются оболочкой, они передаются команде. DIR использует? и *, обрабатывает их как особые, ECHO - нет, а проверка на равенство, если == - нет, и это просто повторяет знак вопроса. Я сомневаюсь, что то, что вы там написали, будет действительным и в bash. Как в линуксе? и * всегда имеют отношение к именам файлов, и вы, кажется, хотите просто для сравнения переменных.

C:\a>touch BE99 <---- a gnuwin32 touch line to create a file called BE99

C:\a>if BE99==BE9? echo true

C:\a>if "BE99"=="BE9?" echo true

C:\a>

C:\a>dir BE9? /b
BE99

C:\a>

Так, ? работает с DIR, но не с == b

Но кроме того, если вы сделаете "4" == 4, тогда он скажет "ложь", так как вы должны делать кавычки вокруг обоих или около них. Причина кавычек в том, что если вы делаете% var% ==% var% и% var% пусто, тогда у вас есть синтаксическая ошибка, потому что она работает путем подстановки, подстановки, так что вы ничего не получите по обе стороны от ==, так что просто если = знак равно Так что лучше использовать кавычки, чем без кавычек. Некоторые используют []. если [% var%] == [% var%]

Вы можете использовать это

C:\a>set test=BE9923432423

C:\a>echo %test:~0,4%
BE99

Таким образом, в вашем коде вы можете сделать, if "%test:~0,4%"=="BE99" (

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .