code

Windows 배치 파일 : 그렇지 않은 경우

codestyles 2020. 11. 24. 08:01
반응형

Windows 배치 파일 : 그렇지 않은 경우


하나의 인수가 필요한 간단한 배치 파일을 만들고 있습니다 (더 많은 것을 제공 할 수 있지만 무시합니다).

테스트를 위해 지금까지 가지고있는 것입니다.

if not %1 == "" (
    dir /s/b %1
) else (
    echo no
)

기본적으로 인수가 제공되면 폴더의 모든 파일을 재귀 적으로 표시한다고 말하고 싶습니다. 그렇지 않으면 아니오라고 말하십시오.

내가 인수를 제공 할 때 작동하지만, 하나를 제공하지 않으면 그냥 말해 줄 것 ( was unexpected at this time입니다.

내 말은, 작동하지만, 작동하지 않는 이유를 설명하는 사용자 친화적 인 메시지를 적어도 표시하고 싶었습니다. 코드를 어떻게 변경해야합니까?


if not %1 == "" (

반드시

if not "%1" == "" (

인수가 주어지지 않으면 완전히 비어 있습니다 ""(대부분의 프로그래밍 언어에서 빈 문자열을 나타냄). 따라서 우리는 빈 인수를 감지하기 위해 주변 따옴표를 사용합니다.


당신 %1을 무언가로 둘러싸십시오 .

예 :

if not "%1" == ""

꽤 자주 본 또 하나 :

if not {%1} == {}

등등...

짐작할 수 있듯이 문제 %1는 문자 그대로 공허로 대체 된다는 것 입니다. 그것은 '빈 문자열'이 아니라 실제로 그 시점에서 소스 파일의 공백입니다.

그런 다음 교체 후 인터프리터는 구문 분석을 시도하고 if혼란스러워집니다.


다음을 수행해야합니다.

if "%1" == "" (
    echo The variable is empty
) ELSE (
    echo The variable contains %1
)

또 다른 관련 팁은 "% 1"대신 "% ~ 1"을 사용하는 것입니다. "CALL /?"입력 자세한 내용은 Windows의 명령 줄에서 확인하세요.


대안은 변수를 설정하고 정의되었는지 확인하는 것입니다.

SET ARG=%1
IF DEFINED ARG (echo "It is defined: %1") ELSE (echo "%%1 is not defined")

불행히도 %1with 직접 사용 DEFINED은 작동하지 않습니다.


이렇게해야 돼 ...

"A % 1"== "A"가 아닌 경우

입력 인수 % 1이 null이면 코드에 문제가 있습니다.

참고 URL : https://stackoverflow.com/questions/5683583/windows-batch-files-if-else

반응형