如何从 Powershell 使用 FileInfo 对象
我现在开始使用 PowerShell,在使用 Unix shell 很长时间之后,我想知道如何检查文件或目录是否存在。
在 Powershell 中,为什么以下表达式中的 Exist
返回 false?
PS H:\> ([System.IO.FileInfo]"C:\").Exists
False
有没有比以下更好的方法来检查文件是否是目录:
PS H:\> ([System.IO.FileInfo]"C:\").Mode.StartsWith("d")
True
I am now starting to use PowerShell and after a lot of time using the Unix shells and want to know how to check for the existence of a file or directory.
In Powershell why does Exist
return false in the following expression?
PS H:\> ([System.IO.FileInfo]"C:\").Exists
False
And is there a better way to check if a file is a directory than:
PS H:\> ([System.IO.FileInfo]"C:\").Mode.StartsWith("d")
True
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
使用
Test-Path
而不是System.IO.FileInfo.Exists
:您还可以使用
-PathType
来测试该位置是否是文件或目录:DirectoryInfo
和FileInfo
也都定义了PSIsContainer
属性:Use
Test-Path
instead ofSystem.IO.FileInfo.Exists
:You can also use
-PathType
to test whether the location is a file or directory:DirectoryInfo
andFileInfo
also both define aPSIsContainer
property:因为没有名为“C:\”的文件 - 它是一个目录。
Because there is no file called "C:\" - it's a directory.
除了Michael的回答之外,您还可以使用进行测试:
In addition to Michael's answer you could also test using:
这两个评估结果均为 true
Both of these evaluate to true
您可以使用
Get-Item
允许 PowerShell 在FileInfo
和DirectoryInfo
之间进行选择。 如果路径未解析到某个位置,它将引发异常。如果您需要
DirectoryInfo
或FileInfo
条目(如果确实存在),我只会在Test-Path
上使用它。You can use
Get-Item
to allow PowerShell to select betweenFileInfo
andDirectoryInfo
. It will throw an exception if the path doesn't resolve to a location.I would only use this over
Test-Path
if you will need theDirectoryInfo
orFileInfo
entry if it does exist.我使用 get-item 看到了上面的最佳答案,但原始问题使用了 [System.IO.FileInfo],所以我将提出一个答案。
[System.IO.FileInfo]“C:\Users\carsonk” | select *
上面将显示默认表视图中未显示的大多数可用属性。 有一些 PS 内置属性,例如 PSISContainer,不会通过 select 显示 *
PSISContainer 不适用于 [System.IO.FileInfo],因此
I see the best answer above using get-item, but original question used [System.IO.FileInfo] so I'll pose an answer.
[System.IO.FileInfo]"C:\Users\carsonk" | select *
Above will show most of the available attributes not shown in the default table view. There are some PS built-in attributes such as PSIsContainer that won't show by select *
PSIsContainer is not available with [System.IO.FileInfo] so