私は今PowerShellを使い始めており、Unixシェルを何度も使用した後、ファイルまたはディレクトリの存在を確認する方法を知りたいと思っています。
Powershellで、次の式でExist
がfalseを返すのはなぜですか?
PS H:\> ([System.IO.FileInfo]"C:\").Exists
False
そして、ファイルがディレクトリであるかどうかを確認するためのより良い方法はありますか?
PS H:\> ([System.IO.FileInfo]"C:\").Mode.StartsWith("d")
True
System.IO.FileInfo.Existsの代わりに「test-path」を使用します
PS C:\Users\m> test-path 'C:\'
True
PSIsContainerを使用して、ファイルがディレクトリであるかどうかを判断できます。
PS C:\Users\m> (get-item 'c:\').PSIsContainer
True
PS C:\Users\m> (get-item 'c:\windows\system32\notepad.exe').PSIsContainer
False
Michaelの答え に加えて、以下を使用してテストすることもできます。
PS H:> ([System.IO.DirectoryInfo]"C:\").Exists
True
Powershellで、次の式でExistがfalseを返すのはなぜですか?
PS H:>([System.IO.FileInfo] "C:\")。Exists
「C:\」というファイルがないため、ディレクトリです。
Help Test-Path
Test-Path Determines whether all elements of a path exist
Test-Path -PathType Leaf C:\test.txt
Test-Path -PathType Container C:\
Test-Path C:\
これらは両方とも真と評価されます
$(Get-Item "C:\").GetType() -eq [System.IO.DirectoryInfo]
$(Get-Item "C:\test.txt").GetType() -eq [System.IO.FileInfo]
Get-Item
を使用して、PowerShellがFileInfo
とDirectoryInfo
のどちらかを選択できるようにすることができます。パスが場所に解決されない場合は、例外がスローされます。
PS> $(Get-Item "C:\").GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True DirectoryInfo System.IO.FileSystemInfo
DirectoryInfo
またはFileInfo
エントリが存在する場合は、それが必要な場合にのみ、これをTest-Path
で使用します。