2011-03-31 10 views
3

(Win 200x 및 Win7 환경에서 실행해야 함)에 전달합니다. 특정 문자를 따옴표로 묶어 다른 실행 파일에 전달해야합니다. 예 :DOS 배치 스크립트의 파이프 문자를 DOS 배치 스크립트

doparse -delimeter "$" 

일반적으로이 작동합니다

CALL CMD /C "doparse -delimeter "$"" 

불행하게도, 나는 분리 문자로 파이프 문자 (이 요구 사항입니다) 지정해야합니다. 내가 예상 일하는 것이 다음

CALL CMD /C "doparse -delimeter "^|"" 

을하지만 스크립트를 실행할 때 (나는 어떤 존재하지 않는 이름으로 "doparse"를 대체 할 경우 예를 들어, 오류 메시지) 나는이 라인에 대한 모든 출력을 볼 수 없습니다 .

다양한 이스케이프 문자 조합을 시도했지만 제대로 작동하지 않습니다. 가능한가? (불행히도 배치 스크립트를 통해 처리해야합니다).

감사

+0

왜 'CMD/C'를 사용하고 있습니까? 이전 버전의 DOS에서만 다른 하나의 배치 파일을 호출하는 CALL 구문을 지원하지 않아야했습니다. 또한'CMD/C'에 매개 변수를 인용 할 필요는 없습니다. 따옴표 붙은 하나의 매개 변수를 취하는'sh -c'를 생각하고 있습니다. – Neil

답변

3

나를 위해 다음 작품 : 다음

call delim -delimiter "|" 

와 호출 된 배치에서 다음과 같이 그것을 사용 :

setlocal enabledelayedexpansion 
set "delim=%~2" 
echo Delimiter: !delim! 
+0

그게 전부 야. 어쨌든 더 간단한 CALL 구문을 놓쳤습니다. 고마워, 조이! – Dan

+0

해결책은 간단하지만 오류의 원인은 복잡합니다. – jeb

0

이 버전 cmd /c "test2.bat "^|""cmd /c ^"test2.bat "|""을 작동합니다.
둘 다 test2.bat를 시작합니다.

또한 Joey의 버전이 작동합니다.

귀하의 경우 문제는 call이며 따옴표 숫자이므로 특별한 캐럿 트릭이 없어도 call 문 (따옴표 제외)의 특수 문자를 이스케이프 처리 할 수는 없습니다.

set "caret=^" 
call echo & 
call echo ^& 
call echo ^^& 
call echo ^^^& 
call echo "&" 
call echo %%caret%%^& 

마지막 두 작품은, 첫 번째 따옴표 안에 두 번째는 특별한 캐럿 트릭과 두 번째 파서 실행에 &를 이스케이프합니다.

귀하의 경우 |은 따옴표 밖에 있습니다 (두 번째 따옴표 이후입니다).
cmd.exe에 버그가있어서 호출 단계 후에 파서가 이스케이프 처리되지 않은 & 또는 |<>을 발견하면 즉시 처리가 중지됩니다.

관련 문제