Во многих случаях я имел дело с передачей аргументов командных файлов с пробелами, кавычками, процентами и косыми чертами и всевозможными их комбинациями. Обычно мне удавалось понять, как добиться того, чего я хочу, но на этот раз я застрял. Я попробовал пару сотен комбинаций, и моя голова начинает болеть.
Я сократил проблему до довольно простого требования: передать из одного пакетного файла в другой, аргумент, который содержит некоторый текст с разделителями-пробелами, один из которых является пробелом . То есть один пакетный файл должен передать некоторую строку X
другой, чтобы второй выводил эхо "A "B C" D"
. Я просто не могу понять, что X
должно быть.
Вот минимальный пакетный файл, который демонстрирует некоторые попытки, которые не работают. (Этот BAT-файл заменяет оба, вызывая сам себя.)
::Goal is to print:
::"A "B C" D"
::ie., pass from one BAT file to another a quote containing spaces and a quote containing a space
@echo off
if not (%1)==() goto print
:passarg
call %0 "A "B C" D"
call %0 "A \"B C\" D"
%0 "A ""B C"" D"
:print
echo %1
pause
Ни одна из этих попыток не работает. Я пытался использовать "\" \""
, """ """
, """" """"
, "\"" "\""
, ""\" \"""
, "^" ^""
, ^"" "^"
и так далее. Либо они печатают двойные двойные кавычки, теряют все после пробела, либо что-то еще (это неправильно).
Есть идеи? Спасибо.