2012-04-10 4 views
2

나는 VBScript 파일을 실행하기 위해 CScript를 사용하고 있으며 매개 변수에 공백과 따옴표가 모두 포함 된 명령 줄을 스크립트에 전달해야합니다. 전체 명령을 하나의 매개 변수로 스크립트에 전달해야합니다. 예를 들면 다음과 같습니다 (즉 cmd.exe를 실행 포함하는 명령 줄을 통과)공백과 따옴표가있는 명령을 단일 매개 변수로 CScript에 전달하는 방법은 무엇입니까?

C:\> CScript myscript.vbs //Nologo "cmd.exe /c "dir && del /q *.txt"" 

참고 특정 명령 라인은 위의 예에 불과하지만, 내가 할 노력하고있어에 터치를한다. 그러나 나는 일반적인 경우를 해결하려고 노력하고있다.

CScript가 따옴표를 열고 닫는 위치를 결정하려고 혼란스러워하고있는 것 같습니다. 가끔은.

다음 스크립트는 설명에 도움이 될 수 있습니다.

C:\> cscript myscript.vbs //Nologo "1 2 3" 
0 = 1 2 3 

을하지만 인용 매개 변수 안에 따옴표가있을 때 상황이 변경 :

종종
Dim count 
For count = 0 To WScript.Arguments.Count-1 
    WScript.Echo CStr(count) & " = " & WScript.Arguments.Item(count) 
Next 

번 예상대로 작동 : 그것은 그들을보고 그것은 단지 인수로 전달에 출력

C:\> cscript myscript.vbs //Nologo "1 "2 3"" 
0 = 1 2 
1 = 3 

위의 예제에서 매개 변수를 열거 나 닫을 때마다 모호한 점이 있다는 것을 알고 있습니다. 따라서 내부 인용 부호를 이스케이프하여 D 프로세서는 리터럴 문자열로 취급하므로 :

C:\> cscript myscript.vbs //Nologo "1 ^"2 3^"" 
0 = 1 ^2 
1 = 3 

는 흠, 쉘이 당신을 위해 대체 (globbing)을 수행하고 같은 경우에만 작동 같은 것으로 보인다. 나는 cscript가 ^을 cmd.exe와 같은 이스케이프 문자로 인식하는지 의심 스럽다. 이중 인용 명령 안에 작은 따옴표를 사용

(예 : "cmd.exe를/C 'DIR & \가 & CD'") 제대로 하나의 매개 변수로 구문 분석하지만, 호출 cmd.exe를의 경우에 때문에 작동하지 않습니다/c 매개 변수를 사용하면 작은 따옴표로는 충분하지 않습니다. 예를 들어 :

C:\> cmd /c 'dir && cd \' 
''dir' is not recognized as an internal or external command, 
operable program or batch file. 

난 그냥 스크립트의 모든 인수를 반복하고 다시 하나의 긴 문자열로 그들과 합류 할 수 생각하지만, 나는 그들이 그 일을 제공 내부 시세 및 컨텍스트를 잃게됩니다. 또는 이중 따옴표 붙은 param 내부에 작은 따옴표를 사용하고 스크립트 내에서 큰 따옴표로 다시 매핑 할 수도 있습니다. 그러나 만약 의도가 이라면 향후 사례에 대한 작은 따옴표는 고려하지 않았습니까? 나는 일반적인 경우를 풀려고하기 때문에 그 결정을 내릴 수는 없다.

아이디어가 있으십니까?

+0

이 질문을보십시오 : [VBScript 인수의 이중 따옴표] (http://stackoverflow.com/questions/4192376/double-quotes-in-vbscript-argument). 어쩌면 도움이 될만한 답이있을 것입니다. –

+0

감사합니다. 나는 한번 살펴 보겠다. WMI에서 명령 줄을 얻는 것이 효과가있을 수 있습니다. –

답변

2

매개 변수에서 값의 윤곽을 그리는 것처럼 보입니다. 따옴표 외에 다른 것을 사용하고 따옴표를 다시 추가하는 것이 좋습니다. 예를 사용하여 물결표를 들어

Dim count 
For count = 0 To WScript.Arguments.Count-1 
    WScript.Echo CStr(count) & " = " & replace(WScript.Arguments.Item(count),"~",chr(34)) 
Next 

합격 :

cscript myscript.vbs //Nologo "1 ~2 3~" 
0 = 1 "2 3" 
+0

나는 이런 식으로 끝났다. –

0

당신은 두 가지 옵션이 있습니다.

첫 번째는 쉽습니다. 캐럿 (^)을 사용하여 따옴표를 이스케이프 처리하십시오.

C:\> CScript myscript.vbs //Nologo "cmd.exe /c ^"dir && del /q *.txt^"" 

두 번째 옵션은 다른 구분 기호를 사용하는 것입니다. 이와 같은 명령에서 쉘은 매개 변수 사이의 분리 문자로 공백을 사용합니다. 그러나 쉘은 세미콜론, 쉼표, 등호 및 탭과 같은 다른 것들을 허용합니다. 이 중 하나를 구현하면 공백이 명령 줄을 더 이상 손상시키지 않으므로 매개 변수를 따옴표로 묶을 필요가 없습니다.

관련 문제