2012-03-15 5 views
4

내가 묻는대로 입력 인수를 내 dos 배치 파일의 명령으로 실행 중입니다. Run an input parameter as command in dos batch script. 그게 작동하지만 문제는 내가 : 입력 명령이 비어 있는지 확인하십시오. 내가 무엇 :dos 배치 파일에서 입력 명령을 확인 하시겠습니까?

SETLOCAL 
set CMD=%* 
echo Running command [%CMD%] 
IF "%CMD%"=="" (
echo "Input argument missing: command" 
GOTO :end 
) 
echo "XXX %CMD%" 

및 실행 :

script.bat echo "a b c" 

윌 출력 :

Running command [echo "a b c"] 
b was unexpected at this time. 

이것은 IF 조건에서 발생하지만, 왜?

입력 내용이 비어 있는지 어떻게 확인할 수 있습니까? DOS에서 문자열이 비어 있는지 확인하는 방법을 알고 있지만이 조합에서는 작동하지 않습니다. (
BTW : IF 조건을 제거하면 제대로 작동합니다. 명령이 올바르게 실행됩니다. 매개 변수의 부재에 대한

  • 에드

답변

3

테스트 먼저, 다음 할당하고 명령 처리 :에 관해서는

IF .%1 == . (
echo "Input argument missing: command" 
GOTO :eof 
) 

SETLOCAL  
set CMD=%* 
echo Running command [%CMD%] 
echo "XXX %CMD%" 

을 "왜?"그건 때문에의 따옴표값 (a 앞에있는)은 %CMD% 앞에 따옴표를 닫습니다. 따라서 문자열은 "echo "a b c""으로 나타나므로 b이 문자열에서 분리되어 명령 프로세서가 실패합니다. (== 또는 EQU과 같은 비교 토큰이 있지만 이상한 것은 아닙니다 b).

+3

+1 항상 올바른대로 하지만 대부분 안전하기 때문에'% ~ 1 "==" "'을 선호합니다. – jeb

+0

고마워, 나는 어려울 것 같았다. ( – edbras

+0

@jeb : 고마워."% 1 ~ "==" "'너무 생각했다. 그러나 어떤 이유로 첫 번째 매개 변수가 단순히''''(그리고 두 번째 매개 변수는 비어 있지 않은 값인 경우) 오해 할 수 있습니다. "그렇다면, 나는'. % 1 == .' 테스트와 함께 갈 것이라고 생각했기 때문에 –

관련 문제