29

この単純な PowerShell スクリプトを機能させようとしていますが、何かが根本的に間違っていると思います。;-)

ls | ForEach { "C:\Working\tools\custom-tool.exe" $_ }

基本的には、ディレクトリ内のファイルを取得し、それらを 1 つずつ引数としてカスタム ツールに渡したいと考えています。

4

4 に答える 4

45

コマンドパスを引用符で囲む必要がある場合(たとえば、スペースがある場合)は、次のようにします。

ls | % { &"C:\Working\tools\custom-tool.exe" $_.FullName }

文字列の前に&を使用して、PowerShellに文字列ではなくコマンドとして解釈させることに注意してください。

于 2008-10-08T12:44:23.947 に答える
36
ls | %{C:\Working\tools\custom-tool.exe $_}

各オブジェクトがパイプラインを通過するたびに、ツールがそれに対して実行されます。コマンド文字列を引用符で囲むと、文字列になります! ローカル変数「$_」は、おそらく何をすべきかわからないため、エラーが発生します。

于 2008-10-08T01:26:05.657 に答える
6

私はあなたのツールがフルパスを必要としているに違いない。$ _は、パイプラインを経由する各ファイルオブジェクトです。次のような式を使用する必要があります。

ls | %{C:\Working\tools\custom-tool.exe $_.fullname}
于 2008-10-08T11:03:20.047 に答える
2

ジェフリー・ヒックスもスリップセックも正しい。二重引用符をヤンクします。

$_ または $_.fullname は、私のテスト スクリプト (以下) で機能しました。カスタムツールを使用した YMMV。

gci | % { c:\windows\notepad.exe $_.fullname }

また

gci | % { c:\windows\notepad.exe $_ }
于 2008-10-09T17:13:56.147 に答える