#navi(../)
* Test-Pathコマンドレットを使用してファイル・フォルダの存在確認を行う方法 [#adc4e143]
PowerShellのTest-Pathコマンドレットを使用することにより、ファイル・フォルダの有無を確認することができます。~
また、Test-Pathはレジストリ内に指定したキーワードが存在するかも確認することができます。~
以下に使用例を記します。

#contents
#htmlinsertpcsp(win-top.html,win-sp.html)

* 関連記事 [#ufa501ff]
-[[レジストリのルートーキーの省略キー名称>Windows関連/レジストリのルートーキーの省略キー名称]]
-[[ファイル・フォルダの存在チェック・Test-Pathコマンドレット>PowerShell/ファイル・フォルダの存在チェック・Test-Path]]
-[[PowerShellでテキストファイルの指定した範囲を抽出する・Get-Content>PowerShell/テキストファイルの指定した範囲を抽出する・Get-Content]]
-[[PowerShellでテキストファイルの行数を取得する方法・Get-Content>PowerShell/テキストファイルの行数を取得する方法・Get-Content]]
-[[PowerShellでファイルサイズがゼロのファイルを作成する・New-Item>PowerShell/ファイルサイズがゼロのファイルを作成する・New-Item]]
-[[テキストファイルを1行ずつ読み込むサンプルコード>PowerShell/テキストファイルを1行ずつ読み込むサンプルコード]]
-[[Stringオブジェクトのパス文字列を分解する方法・Split-Path>PowerShell/Stringオブジェクトのパス文字列を分解する方法・Split-Path]]
-[[相対パスからフルパスを取得する・Convert-Path>PowerShell/相対パスからフルパスを取得する・Convert-Path]]
-[[パス文字列の結合・Join-Path>PowerShell/パス文字列の結合・Join-Path]]

* Test-Pathコマンドレットを使ってみる [#d1bc4bdd]
Test-Pathコマンドレットを使って、ファイル、フォルダ、レジストリの存在確認をしてみます。

** Test-Pathコマンドレットでファイルの存在確認 [#qfe684d9]
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>

** Test-Pathコマンドレットでディレクトリの存在確認 [#d18639c8]
上記のファイルの存在確認同様、フォルダ(ディレクトリ)を指定して実行した結果です。~
存在する場合は、True, 存在しない場合はFalseが返却されているのが確認できます。
 PS C:\> Test-Path .\Users
 True
 PS C:\> Test-Path .\U*
 True
 PS C:\> Test-Path .\Users\Linux
 False

** レジストリの確認 [#b8a15b47]
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などのレジストリの省略名については、以下の記事を参照してください。
-[[レジストリのルートーキーの省略キー名称>Windows関連/レジストリのルートーキーの省略キー名称]]

* ifを使って判定してみる [#i30ef7ef]
if構文を使ってファイルの存在確認を行うスクリプトを以下に記します。
** Test-Pathコマンドレットを使用したサンプルコード [#ybe00031]
引数に指定されたファイルをTest-Pathコマンドレットを使い存在チェックを行います。

#ref(FileExists.zip)
 ####################
 # 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!
     }
 }

** サンプルコードの実行例 [#j2b7a89b]
上記の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!

#htmlinsertpcsp(win-btm.html,win-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS