2012-09-01 13 views
5

を%*を渡すとき、私は、任意の数の引数(ファイルのリスト)を受け取り、以下のコマンド構造でPowerShellスクリプトを実行するバッチスクリプトを持っている:

"%POWERSHELL%" -Command "%SCRIPT%" %*

%POWERSHELL%PowerShell.exeへのパスで、%SCRIPT%$argsとして%*を受けることを解釈する私のPowerShellスクリプトです。問題は、私がファイル名test$file.nameのようなものを渡すと、PowerShellがtest.nameを受け取ることになります。恐らく$fileは空の変数として解釈されるからです。

バッチスクリプトから一重引用符またはバッククォートで各引数をエスケープする方法はありますか?

答えて

5

%*をPowerShellスクリプトに渡す前にエスケープする$文字。

set ARGS=%* 
set ARGS=%ARGS:$=`$% 
"%POWERSHELL%" -Command "%SCRIPT%" %ARGS% 
+0

魅力のように動作します - 私はそのコロン表記についてはわかりませんでした。 –

+0

ニンジン '^'もうまくいくのでしょうか?または左引用符はPowerShellの特殊文字ですか? –

+2

@ hayk.mart: '%VAR:S1 = S2%'は変数の文字列を置き換えます。詳細は 'help set'を参照してください。 –

関連する問題