2012-03-29 13 views
0

バッチファイルに渡される2つのパラメータを読みたいと思います。バッチファイルは、CreateProcessメソッドを使用してC++プログラムから実行されます。バッチファイルの2番目のパラメータはフォルダパスなので、 "E:\ test folder \ test2"のような2番目のパラメータを渡すとプログラムからバッチファイルが実行されません。バッチファイル内で複数の引数を解析します。

しかし、代わりにE:\ test folder \ test2を渡すとバッチファイルが実行されますが、2番目のパラメータの値はE:\ testのみです。 %1を返し、残りの内容を別の変数に取得します。

これをどのように達成できるか教えていただけますか?私は%*で試しましたが、それは私に第一と第二の両方のパラメータを与えます。私は区切り記号としてスペースのある最初のトークンを削除して、残りの内容を変数に入れたいと思います。これを行う方法はありますか?例えば

私はTEST.BAT testparameter1 Eを渡す場合:私は、値Eを読みたい\ testフォルダの\テストフォルダ2の\テストFOLDER3

:\ testフォルダの\テストフォルダ2の\テスト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:\テスト\フォルダ2の\テストフォルダ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] 

やバッチファイルでは、反対の変化をこのように実行します:

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

別の可能な方法は、すべて集めることである私たちはarrobaでスペースを変更する場合たとえば、あなたはこれを渡すことができます同じ変数に2つ目のパラメータを入れ、それぞれを1つのスペースで区切ります。

set param1=%1 
shift 
set param2= 
:nextParam 
set param2=%param2% %1 
shift 
if not "%1" == "" goto nextParam 
関連する問題