У меня есть команда, которая работает без проблем в cmd.exe:
%TESTING_INSTALLATION_PATH%\\client\\batch.exe --log-level=error --run %CI_BUILDS_DIR%\\autotest\\jobs\\clear.py
Но в PowerShell это не работает так:
$TESTING_INSTALLATION_PATH\\client\\batch.exe --log-level=error --run $CI_BUILDS_DIR\\autotest\\jobs\\clear.py
Но получил вот это:
строка:1 знак:30
+ $TESTING_INSTALLATION_PATH\\client\\batch.exe --log-level=error ...
+ ~~~~~~~~~~~~~~~~~
Unexpected token "\\client\\batch.exe" ........................
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken
Например, %TESTING_INSTALLATION_PATH%
— это ссылка в формате cmd.exe
на переменную среды; поэтому эквивалентное выражение PowerShell: $env:TESTING_INSTALLATION_PATH
- см. концептуальный раздел справки about_Environment_Variables.
По синтаксическим причинам вызов исполняемых файлов, имя или путь которых заключен в кавычки и/или содержит ссылки на переменные, требует использования оператора вызова и.
Наконец, \
не является особенным ни в cmd.exe
, ни в PowerShell, поэтому нет необходимости экранировать его как \\
; cmd.exe
побег персонажа. это ^
, тогда как в PowerShell это `
, так называемый обратный апостроф.
Поэтому:
# NOTE:
# & to invoke a path containing variable references.
# $env: to reference environment variables
# Single \ only.
& $env:TESTING_INSTALLATION_PATH\client\batch.exe --log-level=error --run $env:CI_BUILDS_DIR\autotest\jobs\clear.py
Лаес начнёт с исправления:
%TESTING_INSTALLATION_PATH%\\client\\batch.exe
что должно быть%TESTING_INSTALLATION_PATH%\client\batch.exe
. Что касается остального, мы не знаем, почему и следует ли в аргументах использовать двойную обратную косую черту или одинарную, потому что мы ничего не знаем об исполняемом файлеbatch.exe
. Вам необходимо Отредактировать свой вопрос, чтобы представить минимально воспроизводимый пример. Нам необходимо воспроизвести вашу проблему на рабочих примерах, поэтому вам следует предоставить код, создающий переменные, перед проблемной командой.