Повтор %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}"
К сожалению, это не работает для передачи переменной обратно, так как при завершении вызываемого приложения унаследованная среда отбрасывается.