2010年08月13日

[PowerShell] パスが通るファイルのフルパスを求める。

 PowerShell上でパスが通るものの、実体がどのフォルダー配下にあるのか分からず、ファイルの場所を特定したいときがあります。まずは、セミコロンで区切られているパスの文字列を配列にします。
人気ブログランキング
> $paths=$Env:Path.Split(';')
> $paths
%SystemRoot%\system32\WindowsPowerShell\v1.0\
C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
C:\Windows\System32\WindowsPowerShell\v1.0\
>
 ファイルの存在確認にはTest-Pathコマンドレットが使用できます。これは一パラメーターを1つもち、そのパラメーターにはファイルのパスを指定すれば存在の有無を返してくれます。それを試す前に、引数に指定する文字列をちゃんと作れるかどうか確かめてみます。
> $paths[0]+"\mspaint.exe"
%SystemRoot%\system32\WindowsPowerShell\v1.0\\mspaint.exe
 フォルダー名とファイル名の間に「\」の記号が2個ついています。片方は不要ですが、2つ連続しても問題ない上、さきほどの$pathsの末尾には「\」がついていないものがありました。そのため、このままでいきましょう。

 あとは、$pathsに含まれているすべての要素それぞれに対し、Test-Pathコマンドレットを実行して、ファイルの存在確認をします。Where-Objectを使うと、パイプラインを流れる配列の要素の中から、条件に一致する要素だけを出力してくれるのでこれを併用します。下記の例ではWhere-Objectの略記である ? を使用しています。
> $paths | ?{ Test-Path ($_+"\mspaint.exe") }
C:\Windows\system32\mspaint.exe
>
 いろいろとやりましたが、結局、必要なのはこれだけです。
> $paths=$Env:Path.Split(';')
> $paths | ?{ Test-Path ($_+"\mspaint.exe") }
web拍手 by FC2
タグ:PowerShell PATH
posted by 北条利彦 at 01:06 | Comment(0) | TrackBack(0) | PowerShell | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。