짧은 대답-대괄호 사용 :
if [%1]==[] goto :blank
또는 (따옴표 붙은 인수를 처리해야하는 경우 아래 편집을 참조하십시오) :
if [%~1]==[] goto :blank
왜? 당신은 물어볼 수 있습니다. Jeremiah Willcock이 언급했듯이 http://ss64.com/nt/if.html- 그들은 그것을 사용합니다! 좋아요,하지만 따옴표에 무슨 문제가 있습니까?
다시 한 번, 짧은 대답은 "마 법적"입니다. 때로는 큰 따옴표 (큰 따옴표)가 작은 따옴표 (큰 따옴표)로 변환되기도합니다. 그리고 그들은 시작을 위해 일치해야합니다.
이 작은 스크립트를 고려하십시오.
@rem argq.bat
@echo off
:loop
if "%1"=="" goto :done
echo %1
shift
goto :loop
:done
echo Done.
테스트 해 보겠습니다.
C:\> argq bla bla
bla
bla
Done.
작동하는 것 같습니다. 하지만 이제 두 번째 기어로 전환하겠습니다.
C:\> argq "bla bla"
bla""=="" was unexpected at this time.
Boom 이것은 참으로 평가되지 않았고 거짓으로 평가되지 않았습니다. 스크립트가 죽었습니다. 라인 어딘가에서 원자로를 끄려면 운이 좋을 것입니다. 이제 당신은 Harry Daghlian처럼 죽을 것입니다.
당신은 생각할 수 있습니다-좋습니다, 인수는 따옴표를 포함 할 수 없습니다. 그렇게하면 이런 일이 발생합니다. 틀렸다 여기에 몇 가지 위로가 있습니다.
C:\> argq ""bla bla""
""bla
bla""
Done.
오 예. 걱정하지 마십시오 - 때때로 이 됩니다 작동합니다.
다른 스크립트를 시도해 보겠습니다.
@rem args.bat
@echo off
:loop
if [%1]==[] goto :done
echo %1
shift
goto :loop
:done
echo Done.
위의 경우에 제대로 작동하는지 직접 테스트 할 수 있습니다. 이것은 논리적입니다. 따옴표는 대괄호와 관련이 없으므로 여기에는 마법이 없습니다. 그러나 대괄호로 인수를 spicing하는 것은 어떻습니까?
D:\>args ]bla bla[
]bla
bla[
Done.
D:\>args [bla bla]
[bla
bla]
Done.
거기에 행운이 없습니다. 대괄호는 cmd.exe
의 파서를 질식시킬 수 없습니다 .
잠시 사악한 인용문으로 돌아가 보겠습니다. 논쟁이 따옴표로 끝났을 때 문제가 발생했습니다.
D:\>argq "bla1 bla2"
bla2""=="" was unexpected at this time.
통과하면 어떻게 되나요?
D:\>argq bla2"
The syntax of the command is incorrect.
스크립트가 전혀 실행되지 않습니다. 동일 args.bat
:
D:\>args bla2"
The syntax of the command is incorrect.
그러나 다음 "
과 같은 경우-문자 의 수가 "일치"(즉-짝수) 되면 무엇을 얻 습니까?
D:\>args bla2" "bla3
bla2" "bla3
Done.
NICE-.bat
파일이 명령 줄 인수를 분할 하는 방법에 대해 배웠기를 바랍니다 (힌트 : * bash에서와 정확히 같지 않음). 위의 인수에는 공백이 있습니다. 그러나 따옴표는 자동으로 제거되지 않습니다.
그리고 argq? 그것에 대해 어떻게 반응합니까? 예측 가능 :
D:\>argq bla2" "bla3
"bla3"=="" was unexpected at this time.
그래서-당신이 말하기 전에 생각하세요 : "뭔지 알아? 그냥 따옴표를 사용하세요. [왜냐하면,이게 더 멋져 보이거든요]".
편집하다
최근에이 답변에 대한 의견이있었습니다. 인용 된 인수를 전달하고 인용되지 않은 것처럼 처리하는 sqare 대괄호는 "처리 할 수 없습니다".
구문 :
if "%~1"=="" (...)
큰 따옴표로 인해 새로 발견 된 미덕이 아니라 첫 번째와 마지막 문자가 큰 따옴표 인 경우 인수 변수에서 따옴표를 제거하는 깔끔한 기능의 표시입니다.
이 "기술"은 대괄호로도 잘 작동합니다.
if [%~1]==[] (...)
이것을 지적하는 것이 유용했기 때문에 새로운 답변에 찬성 투표를했습니다.
마지막으로, 큰 따옴표 팬, 형식의 인수가 ""
책에 존재합니까, 아니면 비어 있습니까? 그냥 물어 ';)
GOTO BLANK
다른 두IF
문장 에 대괄호 ( 줄 에있는 것과 같은)를 추가 하면 문제가 해결됩니까?