我现在开始使用 PowerShell,并且在使用 Unix shell 很长时间后,我想知道如何检查文件或目录是否存在。
在 Powershell 中,为什么Exist
在下面的表达式中返回 false?
PS H:\> ([System.IO.FileInfo]"C:\").Exists
False
有没有比以下方法更好的方法来检查文件是否是目录:
PS H:\> ([System.IO.FileInfo]"C:\").Mode.StartsWith("d")
True
我现在开始使用 PowerShell,并且在使用 Unix shell 很长时间后,我想知道如何检查文件或目录是否存在。
在 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
PS C:\Users\m> test-path 'C:\'
True
您可以使用 PSIContainer 来确定文件是否为目录:
PS C:\Users\m> (get-item 'c:\').PSIsContainer
True
PS C:\Users\m> (get-item 'c:\windows\system32\notepad.exe').PSIsContainer
False
除了迈克尔的回答,您还可以使用以下方法进行测试:
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
Test-Path
如果您需要DirectoryInfo
orFileInfo
条目(如果它确实存在),我只会使用它。