답변:
이 시도:
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
barlop의 답변은 대부분의 문제를 다룹니다. 또한 귀하가 필요로하는 ELSE
에 대한 닫는 괄호와 같은 줄에 있어야한다. IF
. 이렇게 :
IF "%var%"=="whatever" (
REM Do stuff
) ELSE (
REM Do other stuff
)
== b 줄에서 물음표 나 와일드 카드를 사용할 수없는 것 같습니다 == 연산자는 사용하지 않습니까? 특별하다면 문자 그대로 받아 들인다. 그리고 파일 이름도 보지 않습니다. 그래서, 그것은 단지 그것이 정말로 걸리는 것을 증명하기 위해 간다? 문자 그대로.
또한, 리눅스에서 echo했다면? 그것은 echo 명령으로 가기 전에 쉘에 의해 해석되어 하나의 char 길이의 파일 이름을 리턴합니다. Windows에서? 또는 *가 쉘에 의해 해석되지 않으면, 명령에 전달됩니다. DIR이 사용합니까? *, ECHO는 특별하다고 간주하고, ==가 아닌 경우 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과 작동하지만 a == b와는 작동하지 않습니다.
그러나 그 외에도 "4"== 4 일 경우 둘 다 또는 둘 다 따옴표를 사용해야하므로 false로 말할 것입니다. 따옴표를 사용하는 이유는 % var % == % var % 및 % var %가 비어있는 경우입니다. 대체, 대체에 의해 작동하므로 구문 오류가 발생하므로 == 양쪽에 아무 것도 얻지 못합니다. if = =. 따옴표를 사용하지 말고 따옴표를 사용하는 것이 좋습니다. 일부는 []을 사용합니다. if [% var %] == [% var %]
이것을 사용할 수 있습니다.
C:\a>set test=BE9923432423
C:\a>echo %test:~0,4%
BE99
따라서 코드에서 할 수 있습니다. if "%test:~0,4%"=="BE99" (