Windows 7にプリインストールされているPowershellを使用するだけです。Powershellはcmdコマンドを実行でき、パスの任意の場所でワイルドカードを理解します。
Powershellを起動するには、スタートメニューの検索ボックスに「powershell」と入力してEnterキーを押します。
アプリケーションがすべてのファイル名を含む文字列を期待する場合、これは正しいスクリプトです:
$delimiter = " "
[string]$files = $nothing ; ls *.txt | % { $files += $_.fullname + $delimiter } ; application.exe $files
アプリケーションがファイル名のコンマ区切りリストを予期$delimiter = " "する$delimiter = ","場合に変更します。
コードの説明:
[string]$files = $nothing -型の空の変数を作成します string
; -複数のコマンドの区切り記号であり、パイプラインではありません!
ls *.txt | % { $files += $_.fullname + $delimiter } -すべてのテキストファイルのリストを取得し、すべてのファイル名を区切り文字で区切った文字列を作成します
application.exe $files -アプリケーションを呼び出し、ファイルリストを渡します
に追加-recurseするls *.txtことで、ファイルパターンを再帰的に検索することもできます。そのため、完全なコードは次のようになります。
$delimiter = " "
[string]$files = $nothing ; ls *.txt -recurse | % { $files += $_.fullname + $delimiter } ; application.exe $files
編集:
刺激を避けるため、lsおよびのdirエイリアスでGet-ChildItemあり%、のエイリアスForEach-Objectです。短いので、エイリアスを使用してコードを保持します。
EDIT 2018/04/25:
2012年に戻って、私はPowerShellにかなり慣れてきました。もちろん、より簡単な方法がありますが、unix / linuxのグロブ拡張機能ほど簡単ではありません。
app.exe $(ls *.txt | % {$_.FullName})
説明:
- $()は最初に内部の式を評価し、その式の出力で自分自身を置き換えます(bashでバックティックが行うように)
ls *.txt globに一致するすべてのファイルのFileInfoオブジェクトを取得します
*.txt
- PowerShellはオブジェクト指向であるため、各FileInfoオブジェクトのフルネームを出力する必要があります。PowerShellで属性/プロパティに名前を付けるだけで、デフォルトで出力されます。
% { $_.FileName }それは私たちのために。%によって返されるすべての要素をループし、ls各オブジェクトFileNameを出力します。