Everythingを使った関数を書いてみた

everythingのコマンドラインツールes.exeを利用してファイル検索する関数を書いてみた。

function Everything
{
	param([string]$word, [string]$dir=$(pwd))

	start cmd.exe -Verb runas -ArgumentList "/c es.exe", $word, $dir, " | clip"
	sleep -m 500 # 適宜調整
	get-clipboard # http://winscript.jp/powershell/229 を拝借。ありがとうございます。
}
sal evg Everything

補助関数として次のものも利用。

function Get-SpecificLocation
{
	switch ($args[0])
	{
		{ 'visualstudio', 'vs' -contains $_ } {
			switch ($args[1])
			{
				$null { return 'C:\doc\Visual Studio 2013'; break; }
				# 省略
			}
		}
		# 省略
	}
}
sal gsl Get-SpecificLocation

使い方。

> evg 検索文字列 (gsl vs)

検索結果が
フルパス文字列の配列として
ここに表示される

> evg 検索文字列 (gsl vs) | なにか処理

Everything関数のGet-ChildItemに比べたメリット
・gci -Recurseより速い(Everythingの検索が速いのに加え、フルパスしか情報を取得・出力しないため?)
・パスが手っ取り早くほしいときに、 | % FullName | をはさむ手間がいらない
・検索文字列を "word1 word2" の形にしてAND検索が書ける
・検索文字列を -r hoge の形にして正規表現が使える
・他にもEverythingの検索構文が使える

2014/5/8 17:28追記
param([ValidateSet("vs", "visualstudio", ... )]$category) として引数を補完させるほうが便利かも。