2012-03-29 67 views
0

我想讀取傳遞給批處理文件的兩個參數。批處理文件將使用CreateProcess方法從C++程序執行。批處理文件的第二個參數是一個文件夾路徑,因此如果我傳遞第二個參數(如「E:\ test folder \ test2」),那麼批處理文件不會被執行。解析批處理文件中的多個參數。

但是如果我反而通過E:\ test folder \ test2批處理文件得到執行,但顯然第二個參數的值只有E:\ test only ..所以我想要做的是讀取第一個參數%1並將其餘內容轉換爲另一個變量。

有人能告訴我怎麼做到這一點嗎?我嘗試了%*,但它給了我第一個和第二個參數。我想刪除第一個標記,空格作爲分隔符,以便我在變量中包含其餘的內容。有沒有辦法做到這一點 ?

例如如果我通過test.bat的testparameter1 E:\ Test文件夾\文件夾2測試\測試folder3

我想讀出的值E:\ Test文件夾\文件夾2測試\測試folder3到變量中。

如果我通過test.bat的testparameter1 E:\測試\測試folderX \測試folderY的valueIi要讀入到裏面的批處理文件的變量是E:\測試\測試folderX \測試folderY

燦有人幫助我呢?提前致謝。

+1

可以顯示完整的CreateProcess語句嗎?我懷疑你的第二個參數的引號需要被轉義。 – dbenham 2012-03-29 19:34:15

回答

0

如果您的批處理文件被調用

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

可以使用%1%2

rem Contents of test.bat 
@echo %0 
@echo %1 
@echo %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:\測試\文件夾2 \ test文件夾3」的東西路徑,只要確保你通過它在前面加上斜槓:

"E:\test\folder2\test folder 3\" 
+0

謝謝肯,問題是它工作正常,如果我直接用雙引號像命令行傳遞參數,但是當我嘗試使用CreateProcess方法從C++代碼運行批處理文件,然後出於某種原因批處理文件如果我通過doulbe引號傳遞參數不會被執行。它非常令人費解,我不知道它爲什麼會發生。 – 2012-03-29 19:25:00

+0

請編輯您的問題以提供您正在使用的'CreateProcess'代碼。由於批處理文件工作正常,問題必須以您將命令行傳遞給'CreateProcess'的方式進行。 – 2012-03-29 19:35:57

2

您可以通過C++代碼中的另一個字符更改路徑中的空格嗎?舉例來說,如果我們通過阿羅瓦改變的空間,那麼你可以通過這個:

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

,並在批處理文件做了相反的變化是這樣的:

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

另一種可能的方法是收集所有的第二個參數在同一個變量中,將每一個空間分隔開來:

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