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 + """"
}