2012-03-29 3 views
0

배치 파일에 전달되는 두 개의 매개 변수를 읽고 싶습니다. 배치 파일은 CreateProcess 메소드를 사용하여 C++ 프로그램에서 실행됩니다. 배치 파일의 두 번째 매개 변수는 폴더 경로이므로 "E : \ test folder \ test2"와 같은 두 번째 매개 변수를 전달하는 경우 프로그램에서 배치 파일이 실행되지 않습니다.배치 파일 내에서 여러 인수를 구문 분석합니다.

그러나 대신 E : \ test folder \ test2를 전달하면 배치 파일이 실행되지만 분명히 두 번째 매개 변수의 값은 E : \ test뿐입니다. 따라서 첫 번째 매개 변수는 다음을 사용하여 읽는 것입니다. % 1을 사용하고 나머지 내용을 다른 변수로 가져옵니다.

나는 이것을 어떻게 달성 할 수 있는지 말해 줄 수 있습니까? % *로 시도했지만 첫 번째와 두 번째 매개 변수를 모두 제공합니다. 나는 변수의 나머지 내용을 가질 수 있도록 공백이있는 첫 번째 토큰을 구분 기호로 제거하려고합니다. 이것을 할 수있는 방법이 있습니까?

예를 들어 나는 TEST.BAT testparameter1 전자를 전달하는 경우 : \ 테스트 폴더 \ 테스트 Folder2 폴더의 \ 테스트 나는 값 E 읽고 싶은 FOLDER3

: 변수에 \ 테스트 폴더 \ 테스트 Folder2 폴더의 \ 테스트 FOLDER3에게. 내가 TEST.BAT testparameter1의 E 전달하는 경우

는 다음 valueIi 배치 파일 내부의 변수에 읽고 싶은 folderY \ 테스트 \ 테스트 folderX의 \ 테스트를 E입니다 : \ 테스트 \ 테스트 folderX \ 테스트 folderY

수 누군가 날 도와 줘? 미리 감사드립니다.

+1

전체 CreateProcess 문을 표시 할 수 있습니까? 나는 당신의 두번째 주장 주위에 따옴표가 이스케이프되어야한다고 생각합니다. – dbenham

답변

0

배치 파일이

test.bat testparam1 "E:\test\folder2\test folder 3" 

호출하면 당신은 %1

rem Contents of test.bat 
@echo %0 
@echo %1 
@echo %2 

%2를 사용하여 매개 변수를 읽을 수 위의 생산 :

C:\Temp>test testparam1 "E:\test\folder2\test folder 3" 
test.bat 
testparam1 
"E:\test\folder2\test folder 3" 

C:\Temp> 

그래서 만약 당신이 이미 가지고있는 매개 변수를 변수로; 첫 번째는 %1이고 두 번째는 %2입니다. 문제는 당신이 "E : \ 테스트 \ Folder2와의 \ 테스트 폴더 3"을 사용하여 뭔가하려고 노력하고 있다는 경우

:

"E:\test\folder2\test folder 3\" 
경로를, 당신이 그것을 전달하기 전에 후행 백 슬래시를 추가해야합니다
+0

감사합니다 Ken, 당신이 언급 한 것처럼 큰 따옴표로 직접 커맨드 라인에서 매개 변수를 전달하면 문제가 제대로 작동하지만 CreateProcess 메소드를 사용하여 C++ 코드에서 배치 파일을 실행하려고하면 배치 파일이 어떤 이유로 수행됩니다 내가 doulbe 따옴표로 인수를 전달하는 경우 실행되지 않습니다. 매우 혼란스럽고 나는 그것이 왜 일어나는 지 모른다. –

+0

위의 질문을 편집하여 사용중인'CreateProcess' 코드를 제공하십시오. 배치 파일이 잘 작동하기 때문에, 문제는 커맨드 라인을'CreateProcess'에 넘기는 방식에 있어야합니다. –

2

C++ 코드에서 다른 문자로 경로의 공백을 변경할 수 있습니까?

test.bat testparameter1 E:\[email protected]\[email protected]\[email protected] 

및 배치 파일에 반대 변경이 방법을 수행하십시오 : 우리가 arroba에 의해 공간을 변경하는 경우 예를 들어, 당신은이를 통과 할 수

set param2=%2 
set param2=%param2:@= % 

또 다른 가능한 방법은 모두를 수집하는 것입니다 동일한 변수에서 두 번째 매개 변수의 매개 변수를 하나씩 공백으로 구분 :

set param1=%1 
shift 
set param2= 
:nextParam 
set param2=%param2% %1 
shift 
if not "%1" == "" goto nextParam