Двойные кавычки не выходят из строки при вызове команды Powershell из пакетного сценария? - PullRequest
1 голос
/ 25 апреля 2019

Структура двойных кавычек не сохраняется в моем тестовом сообщении при прохождении через экземпляр powershell, вызываемый через пакетный скрипт, как описано ниже:

set test={"this":"is","a":"test"}
FOR /F "delims=" %%i in (' powershell -Command "& {$message = '%test%'; echo $message}" ') DO SET message=%%i
echo %test%
echo %message%

вывод выглядит следующим образом:

{"this":"is","a":"test"}
{this:is,a:test}

Я бы хотел сохранить кавычки для дальнейшей обработки строки в powershell, но, как вы можете видеть, они удаляются при вводе в переменную $message.

Любое понимание того, как я мог бы это исправить?

1 Ответ

4 голосов
/ 25 апреля 2019

Повтор %test%, содержащий двойные кавычки внутри команды powershell d-quote, сломает вложенные d-кавычки.

Один из способов преодоления этого состоит в использовании подстановки пакетной строки для экранирования внутренних d-кавычек с помощьюобратная косая черта на лету

:: Q:\Test\2019\04\25\SO_55855412.cmd
@Echo off
set "test={"this":"is","a":"test"}"
FOR /F "delims=" %%i in ('
     powershell -Command "& {$message = '%test:"=\"%'; echo $message}" 
') DO SET "message=%%i"
echo %test%
echo %message%

возвращает здесь:

> SO_55855412.cmd
{"this":"is","a":"test"}
{"this":"is","a":"test"}

Другое решение состоит в том, чтобы НЕ передать %test% в качестве аргумента, но получить переменнуюиз унаследованной среды

    powershell -Command "& {$message = $env:test; echo $message}"

К сожалению, это не работает для передачи переменной обратно, так как при завершении вызываемого приложения унаследованная среда отбрасывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...