目的
PowerShellでファイル検索のツールを作ってみた。
環境
OS : Windows 7 以降
PowerShell: Version 3 以降
コード
PowerShellスクリプトですが、Windows バッチファイルとしても実行できる特殊な構造になっています
find.bat
<# : バッチコマンド(PowerShellコメント)開始
@echo off & setlocal
rem
rem 高速ファイル検索
rem
rem Find.bat [検索対象の最上位フォルダー] [ファイル名のフィルター]
rem
rem Created by earthdiver1
rem クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。
rem
rem -------------------------------------------------------------------------------
rem 以下はPowershellスクリプトをバッチファイルの中に埋め込むためのプリアンブルです。
set BATCH_ARGS=%*
if defined BATCH_ARGS set BATCH_ARGS=%BATCH_ARGS:"=\"%
if defined BATCH_ARGS set BATCH_ARGS=%BATCH_ARGS:^^=^%
endlocal & Powershell -NoP -C "$input|&([ScriptBlock]::Create((${%~f0}|Out-String)))" %BATCH_ARGS%
exit/b
rem -------------------------------------------------------------------------------
: バッチコマンド(PowerShellコメント)終了 #>
param (
[String]$Dir,
[String]$Filter
)
Function find {
param (
[String]$Dir,
[String]$Filter
)
if (-not $Dir) { Write-Host "フォルダの指定がありません。" -Fore Red ; Get-Help find; return }
if (-not $Filter) { Write-Host "ファイルの指定がありません。" -Fore Red ; Get-Help find; return }
$global:ErrorView = "CategoryView"
Get-ChildItem -Path $Dir -Filter $Filter -File -Recurse | %{ Write-Output $_.FullName }
$global:ErrorView = "NormalView"
}
if (-not $Dir) {
Write-Host "検索対象の最上位フォルダを指定してください。: " -NoNewline -Fore Green
try { $Dir = (Read-Host).Trim() } catch [System.Exception] {}
}
if (-not $Filter) {
Write-Host "検索対象のファイルを指定してください(ワイルドカード使用可)。: " -NoNewline -Fore Green
try { $Filter = (Read-Host).Trim() } catch [System.Exception] {}
}
find $Dir $Filter
Write-Host
Write-Host "終了するには何かキーを押してください . . ." -Fore Green
$Host.UI.RawUI.FlushInputBuffer()
$Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyUp") | Out-Null