Что не так со следующими командными строками для моего пакетного скрипта?
set test=BE99012345678901
if %test% == "BE99????????????"(
echo This number begins with BE99
)
Else (
echo This number doesn't begin with BE99
)
pause
Попробуй это:
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
Ответ Барлопа охватывает большинство ваших проблем. Следует также отметить, что вам нужно, чтобы ELSE
был в той же строке, что и закрывающая скобка для IF
. Вот так:
IF "%var%"=="whatever" (
REM Do stuff
) ELSE (
REM Do other stuff
)
Похоже, вы не можете использовать вопросительный знак или любой подстановочный знак в строке 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" (