不鼓励使用PowerShell处理路径字符串中的空格

时间:2011-07-05 16:09:13

标签: powershell path spaces

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

我不想为此创建一个特定的功能,只是为了使事情有效,保持简单。你能帮忙吗?

编辑:要使脚本工作,请添加:$ 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é")
  }
}

1 个答案:

答案 0 :(得分:2)

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

阅读完毕后,我认为你的问题是你是点源数组而不是单个文件。当你想要做. $Fonctions时,你正在做. $fonc,这是foreach变量,只保存一个文件路径。