PowerShellのTest-Pathコマンドレットを使用することにより、ファイル・フォルダの有無を確認することができます。
また、Test-Pathはレジストリ内に指定したキーワードが存在するかも確認することができます。
以下に使用例を記します。
Test-Pathコマンドレットを使って、ファイル、フォルダ、レジストリの存在確認をしてみます。
Test-Pathコマンドレットに存在確認するファイル名を指定し実行した結果です。
ワイルドカードも利用することができます。
存在する場合は、True, 存在しない場合はFalseが返却されているのが確認できます。
PS C:\Windows> dir *.log ディレクトリ: C:\Windows Mode LastWriteTime Length Name ---- ------------- ------ ---- <snip> -a--- 2012/01/11 16:09 1313 TSSysprep.log -a--- 2012/09/14 11:17 1534693 WindowsUpdate.log PS C:\Windows> Test-Path .\WindowsUpdate.log True PS C:\Windows> Test-Path .\*.log True PS C:\Windows> Test-Path .\*.txt False PS C:\Windows>
上記のファイルの存在確認同様、フォルダ(ディレクトリ)を指定して実行した結果です。
存在する場合は、True, 存在しない場合はFalseが返却されているのが確認できます。
PS C:\> Test-Path .\Users True PS C:\> Test-Path .\U* True PS C:\> Test-Path .\Users\Linux False
HKEY_LOCAL_MACHINEレジストリの存在確認を実行した結果です。
存在する場合は、True, 存在しない場合はFalseが返却されているのが確認できます。
PS C:\> Test-Path HKLM:\HARDWARE True PS C:\> Test-Path HKLM:\HARDWARE\DESCRIPTION True PS C:\> Test-Path HKLM:\HARDWARE\DESCRIPTION\System True PS C:\> Test-Path HKLM:\HARDWARE\DESCRIPTION\System\CentralProcessor True
HKLM, HKCUなどのレジストリの省略名については、以下の記事を参照してください。
if構文を使ってファイルの存在確認を行うスクリプトを以下に記します。
引数に指定されたファイルをTest-Pathコマンドレットを使い存在チェックを行います。
#################### # FileExists.ps1 #################### function usage { Write-Host "Usage: "$Script:MyInvocation.MyCommand.Name "<filename> <filename> ..." exit 1 } if ($args.length -eq 0) { usage } foreach($f in $args) { if (Test-Path $f) { Write-Host $f is found! } else { Write-Host $f is not found! } }
上記のFileExists.ps1の実行例を以下に記します。
実行例では、3つの引数を渡し3つのファイルの存在チェックを行っています。
PS Z:\sample> .\FileExists.ps1 C:\Windows C:\Windows\WindowsUpdate.log C:\Linux C:\Windows is found! C:\Windows\WindowsUpdate.log is found! C:\Linux is not found!