【问题标题】:PowerShell Test-Path is returning false alwaysPowerShell 测试路径总是返回 false
【发布时间】:2020-06-14 16:06:22
【问题描述】:

我在 powershell 中有两个以下数组 $obj= ('销售','财务','config.ini') $objPath= ('D:\Project','D:\Element','D:\Project')

  1. 现在 $obj 可以是文件夹名或文件名
  2. $objPath 是相应位置 $obj 将驻留的路径

我想检查相应的 $objPath 中是否存在该文件夹或文件

我的代码:

foreach($element in $obj){
    foreach($elementpath in $objPath){
    Test-Path $element+'\'+$elementpath
    }
}

但它每次都返回 false。谁能建议我在哪里做错了

【问题讨论】:

  • $element+'\'+$elementpath?你想做什么?单引号 ' 防止变量扩展,所以如果你想检查 $element+\$elementpath 使用双引号,如 "$element+\$elementpath"
  • 我不认为单引号是这里的问题。我认为示例中的代码突出显示是错误的,使得报价看起来没有关闭。实际上没有引用任何变量。尽管扩展字符串方法可行,但您仍需要反转表达式中的变量。我将更新我的答案以包含一个示例。

标签: powershell


【解决方案1】:

我认为你已经把声明倒写了。当您运行时,它会检查以下路径:

Sales\D:\Project
Sales\D:\Element
Sales\D:\Project
Finance\D:\Project
Finance\D:\Element
Finance\D:\Project
config.ini\D:\Project
config.ini\D:\Element
config.ini\D:\Project

这显然看起来不对。你可以尝试一个小的重写,如:

除了反转您可能希望使用 Join-Path(作为最佳实践)来娱乐的变量引用,如下所示:

foreach($element in $obj){
    foreach($elementpath in $objPath){
        Test-Path (Join-Path $elementpath $element)
    }
}

它可以使用如下的字符串连接:

foreach($element in $obj){
    foreach($elementpath in $objPath){
        Test-Path ($elementpath + '\' + $element)
    }
}

每个 cmets 字符串扩展也将起作用:

foreach($element in $obj){
    foreach($elementpath in $objPath){
        Test-Path "$elementpath\$element"
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多