powershell Test-Path -Path行为与路径数组

qlvxas9a  于 2023-11-18  发布在  Shell
关注(0)|答案(1)|浏览(170)

我正在尝试检查是否存在多个文件/文件夹。Test-Path参数-Path接受[string[]]数组。请参见示例代码:

$arr = @(
    "C:\a\fake\path\test1.txt",
    "C:\another\fake\path\test2.txt",
    "C:\not\a\path\test3.txt",
    "Z:\not\a\path"
)
if (Test-Path -Path $arr) {
    $true
} else {
    $false
}

字符串
输出:$true
$arr中的路径都无效。它们不存在(我没有Z:驱动器)--这里发生了什么?

fiei3ece

fiei3ece1#

基于有用的评论:
Test-Path * 不支持传递路径的 * 数组 *(通过 * 参数 * 和 * 通过管道 *),但它输出一个布尔值($true$false),指示每个输入路径 * 的路径 * 的存在。

  • 也就是说,有4个输入路径,就像在你的例子中一样,你会得到 *4个布尔输出值 *。
  • 强制一个包含 * 两个或更多 * 元素的数组-不管其元素的类型-为 * 单个 * 布尔值,例如在if语句的条件上下文中,* 总是产生$true *;例如:
[bool] @($false, $false) # -> !! $true

字符串

  • (相比之下,single-element 数组的强制方式与其单个元素本身相同,因此[bool] @($false)实际上与[bool] $false相同,因此$false也相同)。
  • 有关详细信息,请参阅概念about_Booleans帮助主题。

如果你想知道是否 * 至少有一个 * 输入路径 * 不存在,使用-contains运算符:

if ((Test-Path -Path $arr) -contains $false) {
  "At least one of the input paths doesn't exist."
}


(相反,-contains $true告诉你是否至少有一个路径 * 存在 *。

相关问题