【问题标题】:Powershell gci -recurse command returning wrong errorPowershell gci -recurse 命令返回错误错误
【发布时间】:2017-08-22 15:58:29
【问题描述】:

我有两个存储在变量中的路径,我通过 gci 命令运行以检查访问,有点像这样:

$p1 = c:\testing\folder1 #path is access denied
$p2 = c:\testing\folder2 #path doesn't exist

注意:错误是故意的,因为我试图在脚本中测试我的错误处理

如果我通过如下命令运行它们,我会得到相应的错误:

gci $p1
error: access denied c:\testing\folder1
gci $p2
error: file doesn't exist c:\testing\folder2
gci -recurse $p1
error: access denied c:\testing\folder1
gci -recurse $p2
error: access denied c:\testing\folder1

有人知道为什么会发生这种情况吗?

起初我认为将路径变量输入我的函数是一个问题,但我观察了变量并且它们发生了适当的变化。上面的示例与我在脚本外部的 powershell 命令提示符下尝试的完全一样(当然错误文本被简化了......但你明白了要点)。

当我在脚本中运行它并检查 $error 输出时,它与我在命令行运行命令时发现的结果一致。

Windows 7 sp1 上的 Powershell 版本为 4.0。

【问题讨论】:

  • $p1 = c:\testing\folder1 应该是$p1 = 'c:\testing\folder1' 否则会出现c:\testing\folder1: The term 'c:\testing\folder1' is not recognized as the name of a … 错误。

标签: powershell error-handling get-childitem


【解决方案1】:

要使 -recurse 开关按您想要的方式工作,它需要知道 folder1 和 folder2 是目录。像这样设置变量:

$p1 = "c:\testing\folder1\" #path is access denied
$p2 = "c:\testing\folder2\" #path doesn't exist

它应该返回正确的错误。

-当完整路径没有尾部反斜杠时,-recurse 正在 c:\testing 中搜索,它最终跨文件夹 1 运行,并且尝试遍历文件夹 1 时访问被拒绝。

还有命令中的path参数如下:

PS> gci -path $p1 -recurse

【讨论】:

  • 不同意。 -recurse 开关在每种情况下(文件或文件夹)都正确工作:获取指定位置中的项目以及这些位置的所有子项目中的项目。
  • 我不会和你争论,@JosefZ——当指定的路径不存在时,它似乎有非常奇怪和不一致的行为。如果尾随反斜杠不存在且目录不存在,则它似乎在搜索父目录,这从它花费的时间和返回的各种错误(在它继续运行时)得到证明。
  • 没错。我认为这是正确的,甚至认为不会引发类似File Not Found 的错误(与dir /S 相反)。
  • 感谢@TonyHinkle,添加尾部反斜杠正是我需要的。
猜你喜欢
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
  • 2017-01-13
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多