И Windows PowerShell (powershell.exe
) и PowerShell [Core] v6 + (pwsh
) в корне нарушены в отношении правильного цитирования аргументов для внешних программ - см. этот ответ для справочной информации.
Как правило, PowerShell на Windows должен выполнить повторное цитирование за кулисами , чтобы обеспечить только "..."
- используется цитирование, учитывая, что внешние программы не могут понимать '...'
-цитирование также при синтаксическом анализе их командной строки (что на Windows каждая программа должна делать сама).
Windows PowerShell - больше сломан относительно аргументов, которые заканчиваются на \
и , имеют встроенные пробелы , неправильно цитируя их; Например:
PS> foo.exe 'c:\foo \' bar
переводится за кулисы в следующую командную строку:
foo.exe "c:\ foo \" bar
Это неработающий , в большинстве приложений, включая PowerShell собственный CLI - разумно предположить, что \"
является экранированным "
char. дословно , думая, что аргумент продолжается с bar
и затем неявно заканчивается, несмотря на формальное отсутствие закрытия "
.
PowerShell [Core] v6 + более разумно переводит выше к foo.exe "c:\foo \\" bar
, где \\
интерпретируется как экранированный \
, а следующий "
снова имеет функцию syntacti c.
Если вы застряли с Windows PowerShell , вы можете выбрать только:
- либо: , если возможно , оставьте позади
\
- в противном случае : удваивает его вручную (
\\
), но делает это только в том случае, если аргумент также содержит пробелы (в противном случае \\
будет сохранен как есть, хотя в этом случае путей файловой системы, которые обычно доброкачественные).