Bre*_*ers 6 powershell get-childitem
我正在测试一个 Power Shell 脚本来清理一个文件夹,当我使用 -recurse 标志时,我注意到了一些意外的(对我来说)行为
我已阅读帮助文件并进行了一些搜索,但无法找到此处发生的情况的解释。
考虑以下 3 个 Power Shell 命令:
Get-ChildItem -Path C:\folderThatDoesNotExist -recurse
Get-ChildItem -Path C:\folderThatDoesNotExist\ -recurse
Get-ChildItem -Path C:\folderThatDoesNotExist\* -recurse
Run Code Online (Sandbox Code Playgroud)
第一个命令似乎搜索所有 C:\ 并且对于 C:\folderThatDoesNotExist(例如 c:\windows)之外的文件夹存在一堆访问被拒绝错误
c:\f 的第二个错误不存在
未找到 c:\folderThatDoesNotExist\ 的第三个错误
我预计所有 3 都会给出 c:\folderThatDoesNotExist\ Path not found 的错误。为什么前两个给出不同的错误?
第一条命令: Get-ChildItem -Path C:\folderThatDoesNotExist -recurse
您看到了对cmd.exe'sdir命令的不幸点头,其中参数的最后一个路径组件-Path被解释为要在子树层次结构的所有级别上搜索的模式- 即使最后一个组件不包含通配符,例如和。*?
这个 GitHub 问题 中讨论了这种非常有问题的行为。
为避免这种情况,请使用-LiteralPath代替-Path。
警告:user3608068报告这在 PowerShell v4(可能还有所有较低版本)中没有帮助。
第二条命令: Get-ChildItem -Path C:\folderThatDoesNotExist\ -recurse
这种行为更明智 - 发生错误 - 但错误消息只抱怨路径的一部分,C:\f.
这本身就是一个错误,但却是一个无害-Recurse的错误(如果省略,错误消息会引用正确的完整路径)。
第三条命令: Get-ChildItem -Path C:\folderThatDoesNotExist\* -recurse
此命令表现出预期的行为:C:\folderThatDoesNotExist被正确解释为不存在的目录路径(正在使用通配符请求其子元素*),并且错误消息正确反映了这一点。
| 归档时间: |
|
| 查看次数: |
637 次 |
| 最近记录: |