배치 스크립트 문자열에 명령이 있다면


1

배치 스크립트에 대한 다음 명령 줄의 문제점은 무엇입니까?

set test=BE99012345678901


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

답변:


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


% test %는 cmd / DOS 구문이 아니며 * nix에서는 유효하지 않습니다. 반면에 작성한 것은 bash이므로 $ test가 if에서 사용할 것입니다. 그는 일괄 처리를 지정했지만 (의심 할 여지없이 cmd).
barlop

Barlop은 정확합니다. 언급 해 주셔서 감사합니다. 나는 내 대답을 바꾸었다.
user1336087

1

barlop의 답변은 대부분의 문제를 다룹니다. 또한 귀하가 필요로하는 ELSE 에 대한 닫는 괄호와 같은 줄에 있어야한다. IF. 이렇게 :

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

0

== 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" (

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.