2012-01-16 2 views
8

私はここで本当に簡単なことを試していますが、どこが間違っているのか分かりません。私はこれに関する多くの他の有用な議論を見つけました - particularly here - 私の特定のシナリオをカバーするものは何も見つかりませんでした。 PowerShellでPowerShell - 計算されたパスをスペースで渡す

が、私は次のように入力した:

echoargsに両方の呼び出しで
$path = "c:\program files\" 
$path2 = "c:\program files\fred2\" 
echoargs $path $path2 
echoargs "$path" "$path2" 

、私は戻って、結果として

Arg 0 is <c:\program files" c:\program> 
Arg 1 is <files\fred2"> 

を取得します。パラメータを正しく渡すにはどうすればよいですか?

NB:私の実際のスクリプトでは、パス変数はいくつかの設定パラメータから構築されているので、単引用符で直接渡すことはできません。

+0

をあなたの実際のコードの多くを含めてください。あなたのサンプルを試してみたところ、私は 'c:\ program files \'と 'c:\ program files \ fred2 \ 'を両方持っていました。 –

+0

@AndyArismendiは非常に奇妙です。私はちょうど、この質問からPowerEhell ISEに直接貼り付けてコピーしました。 PowerShellのどのバージョンを使用していますか?私は2.0を使用しています。私は信じています –

+0

さて、私はテストする関数を定義しました: 'function echoargs {$ args [0]; $ args [1]} '。 –

答えて

18

あなたは、実行の範囲内の単一引用符であなたの結果の文字列を囲む必要があります。

echoargs "'$path'" "'$path2'" 

これは、単一引用符の内側に区切りと呼ばれるアプリケーションに渡しますが、文字列全体を二重にまだあるので、あなたのパラメータは正しく展開されます。

+0

私はこの問題について数時間を費やしました。シングルダブルクォートのコンボはついに全てが機能しました! – Shadoninja

4

最新のPSCXのドロップでは、EchoArgs.exeを更新して、受信側のアプリケーションが表示するコマンドライン全体を表示するようにしました。この場合は、次のようになります。

 
14 > echoargs $path $path2 
Arg 0 is c:\program files" c:\program 
Arg 1 is files\fred2" 

Command line: 
"C:\Users\Keith\Documents\WindowsPowerShell\Modules\Pscx\Apps\EchoArgs.exe" "c:\program files\" "c:\program files\fred2 
\" 

\"がどこかにエスケープするための末尾の二重引用符を引き起こしていると思われます。 BTWはCMD.exeでも同じことが起こります。末尾のスラッシュを削除するようにパスを修正した場合(またはスラッシュを使用した場合)、これは起こりません。

 
20 > $path = "c:\program files" 
21 > $path2 = "c:\program files\fred2" 
22 > echoargs $path $path2 
Arg 0 is c:\program files 
Arg 1 is c:\program files\fred2 

Command line: 
"C:\Users\Keith\Documents\WindowsPowerShell\Modules\Pscx\Apps\EchoArgs.exe" "c:\program files" "c:\program files\fred2" 

あなたはどこか別の場所からこれらのパスを取得する場合、あなたはそのような末尾のバックスラッシュ削除することができます。

$path = $path.TrimEnd("\") 
+0

どのように奇妙な、感謝キース。 –

+0

+1根本原因についてもう少し詳しく説明しています。 – JNK

関連する問題