【问题标题】:Discouraged dealing with spaces in path strings with PowerShell不鼓励使用 PowerShell 处理路径字符串中的空格
【发布时间】:2011-07-05 16:09:13
【问题描述】:

我有这段代码基本上检查一个或多个文件是否存在。当我搜索一个文件时它有效,但当我尝试搜索更多文件时它不起作用。我试图定义一个数组,该数组接受要查找的文件路径字符串,然后检查它的存在。但我注意到因为路径中有一个空格,所以它不起作用。我尝试了所有我能用简单引号、双引号、转义引号、什么都没有的组合......

我不想为此创建一个特定的功能,只是为了让事情顺利进行,保持简单。你能帮忙吗?

编辑:要使脚本正常工作,请添加: $LogSb = new-object System.Text.StringBuilder 您可能想要添加一些输出,因为默认情况下,所有内容都会静默地进入“日志”字符串构建器。

##Checkink files containing my functions
#
$Fonctions = "C:\Program Files\scheduler\jobs\SuivideProd\OLAP\PlusProchesVoisins.ps1", "C:\Program Files\scheduler\jobs\SuivideProd\OLAP\OrdreProcess.ps1"
#Tried something like this before, same error :
#$Fonctions = @()
#$Fonctions += "C:\'Program Files'\scheduler\jobs\SuivideProd\OLAP\PlusProchesVoisins.ps1"
#$Fonctions += "C:\'Program Files'\scheduler\jobs\SuivideProd\OLAP\OrdreProcess.ps1"
foreach ($fonc in $Fonctions) {
  if ((Test-Path $fonc) -eq $True) {
    [void]$LogSb.append("`n").appendline($("Le fichier contenant la fonction $(split-path $fonc -Leaf) a été trouvé."))
    #dot source the file if existing
    . $Fonctions
  } else {
    [void]$LogSb.append("`n").appendline($("Le fichier contenant la fonction $fonc n'a pas été trouvé."))
    throw ("Le fichier contenant la fonction $(split-path $fonc -Leaf) n'a pas été trouvé")
  }
}

【问题讨论】:

  • 我想我发现了您的问题,但是将来当您的问题涉及错误时,您应该告诉我们错误是什么。

标签: powershell path spaces


【解决方案1】:

您定义数组的第一种方法很好。您的第二种方法(使用@()+=)不需要's 围绕Program Files(额外的撇号实际上使路径不正确)。

通读后,我认为您的问题是您正在点源 array 而不是单个文件。当您可能打算执行. $fonc 时,您正在执行. $Fonctions,它是包含单个文件路径的foreach 变量。

【讨论】:

  • 天哪!我花了两个小时...由于我捕获错误并仅显示其 $_.Message ,因此我没有注意确切的错误,并认为这是由于数组构造造成的。无论如何,非常感谢。
猜你喜欢
  • 1970-01-01
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 2013-01-07
  • 2011-08-25
相关资源
最近更新 更多