Powershell открытие пути к файлу с пробелами

Im my PS script я хочу иметь возможность запускать другой скрипт в другом экземпляре PS, выполнив следующее:

$filepath = Resolve-Path "destruct.ps1"

start-process powershell.exe "$filepath"

уничтожить.ps1 находится в той же папке, что и этот скрипт

однако при запуске этого скрипта в месте, которое включает пробелы ("C:My Скрипты") получу следующую ошибку:

термин 'C:My не распознано как командлет, функция, выполняемая программа или файл сценария. Проверьте термин и попробуйте снова.

Я знаю, используя " & " с методом Invoke-Expression решает эту проблему, как я могу сделать то же самое, но с помощью метода start-process?

большое спасибо soo за любую помощь!

5 ответов


попробуйте это:

 start-process -FilePath powershell.exe -ArgumentList "-file `"$filepath`""

редактировать после комментария:

start-process -FilePath powershell.exe -ArgumentList "-file `"$($filepath.path)`""

Примечание:

$filepath это [pathinfo] тип, а не [string] тип.


вы можете добавить экранированные двойные кавычки, чтобы передать цитируемый аргумент:

 "`"$filepath`""

я отвечаю здесь за общий сценарий.

Если вам нужно, чтобы перейти к папке, например C:\Program Files из Powerhsell следующая команда не будет работать, поскольку она имеет пробел между путем.

cd C:\Program Files

вместо этого вставьте путь с двойными кавычками, как показано ниже.

cd "C:\Program Files"


имя файла может содержать пробелы, поэтому сохраните пробелы в полном пути:
Notepad++ exec команда:
"C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe ""& \ " $(FULL_CURRENT_PATH)\""

то же самое из командной строки:
"C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe "" & \"C:\a_work\Systems\name с пробелами.ps1\""


на всякий случай [string]$shipno (который является path & file name) входит в том числе пробелы, что позволяет успешно передать его в-FilePath:

if ($shipno.contains(" ") -eq $true) {
   $shipno = """" + $shipno + """"
}