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")
불행히도 %1
with 직접 사용 DEFINED
은 작동하지 않습니다.
이렇게해야 돼 ...
"A % 1"== "A"가 아닌 경우
입력 인수 % 1이 null이면 코드에 문제가 있습니다.
참고 URL : https://stackoverflow.com/questions/5683583/windows-batch-files-if-else
'code' 카테고리의 다른 글
내부 블록 수준 요소 중첩 (0) | 2020.11.24 |
---|---|
다른보기 내에서보기를 호출 할 수 있습니까? (0) | 2020.11.24 |
작업 및 프로세스 ID를 인쇄하지 않고 백그라운드에서 bash 명령 실행 (0) | 2020.11.24 |
지정된 형식 멤버는 LINQ to Entities에서 지원되지 않습니다. (0) | 2020.11.24 |
Visual Studio에서 폴더 열기 (0) | 2020.11.24 |