web-dev-qa-db-ja.com

PowershellからFileInfoオブジェクトを使用する方法

私は今PowerShellを使い始めており、Unixシェルを何度も使用した後、ファイルまたはディレクトリの存在を確認する方法を知りたいと思っています。

Powershellで、次の式でExistがfalseを返すのはなぜですか?

PS H:\> ([System.IO.FileInfo]"C:\").Exists
False

そして、ファイルがディレクトリであるかどうかを確認するためのより良い方法はありますか?

PS H:\> ([System.IO.FileInfo]"C:\").Mode.StartsWith("d")
True
13
BeWarned

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
23
Michael

Michaelの答え に加えて、以下を使用してテストすることもできます。

PS H:> ([System.IO.DirectoryInfo]"C:\").Exists
True
12
Kev

Powershellで、次の式でExistがfalseを返すのはなぜですか?

 PS H:>([System.IO.FileInfo] "C:\")。Exists 
 

「C:\」というファイルがないため、ディレクトリです。

11
Jay Bazuzi
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:\
9
Doug Finke

これらは両方とも真と評価されます

$(Get-Item "C:\").GetType() -eq [System.IO.DirectoryInfo]
$(Get-Item "C:\test.txt").GetType() -eq [System.IO.FileInfo]
3
Ybot

Get-Itemを使用して、PowerShellがFileInfoDirectoryInfoのどちらかを選択できるようにすることができます。パスが場所に解決されない場合は、例外がスローされます。

PS> $(Get-Item "C:\").GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     DirectoryInfo                            System.IO.FileSystemInfo

DirectoryInfoまたはFileInfoエントリが存在する場合は、それが必要な場合にのみ、これをTest-Pathで使用します。

2
jdmichal