16

私は現在、PowerShell の使用を開始しており、Unix シェルを長時間使用した後、ファイルまたはディレクトリの存在を確認する方法を知りたいと考えています。

ExistPowershellでは、次の式で false を返すのはなぜですか?

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

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

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

6 に答える 6

25

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
于 2009-03-12T00:08:27.980 に答える
12

マイケルの答えに加えて、次を使用してテストすることもできます。

PS H:> ([System.IO.DirectoryInfo]"C:\").Exists
True
于 2009-03-12T00:12:18.627 に答える
12

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

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

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

于 2009-03-12T20:07:32.363 に答える
10
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:\
于 2009-03-12T00:12:16.803 に答える
2

Get-ItemPowerShellがとの間FileInfoで選択できるようにするために使用できますDirectoryInfo。パスが場所に解決されない場合は、例外がスローされます。

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

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

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

于 2011-08-29T20:01:15.493 に答える