Не рекомендуется работать с пробелами в строках пути с помощью PowerShell - PullRequest
1 голос
/ 05 июля 2011

У меня есть этот кусок кода, который в основном проверяет, существует ли один или несколько файлов. Это работает, когда я ищу один файл, но не работает, когда я пытаюсь найти больше. Я попытался определить массив, который принимает строку пути к файлу для поиска, а затем проверить его существование. Но я заметил, потому что на пути есть место, оно не будет работать. Я перепробовал все комбинации, которые мог, с простыми кавычками, двойными кавычками, экранирующими кавычками, ничего ...

Я не хочу создавать специальную функцию для этого, просто чтобы все работало, оставалось простым. Не могли бы вы помочь?

РЕДАКТИРОВАТЬ: чтобы заставить скрипт работать, добавьте это: $ LogSb = new-object System.Text.StringBuilder и вы можете захотеть добавить какой-нибудь вывод, потому что по умолчанию все идет тихо в конструктор строк «log».

##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 Ответ

2 голосов
/ 05 июля 2011

Ваш первый способ определения массива в порядке. Ваш второй метод (с использованием @() и +=) не требует ' s около Program Files (лишние апострофы фактически делают пути неверными).

Прочитав его, я думаю, что ваша проблема в том, что вы используете точечный источник массива , а не отдельный файл. Вы делаете . $Fonctions, когда, вероятно, хотите сделать . $fonc, то есть переменную foreach, содержащую один путь к файлу.

...