Передача пакетного файла с аргументом, содержащим цитату с пробелом - PullRequest
1 голос
/ 12 апреля 2010

Во многих случаях я имел дело с передачей аргументов командных файлов с пробелами, кавычками, процентами и косыми чертами и всевозможными их комбинациями. Обычно мне удавалось понять, как добиться того, чего я хочу, но на этот раз я застрял. Я попробовал пару сотен комбинаций, и моя голова начинает болеть.

Я сократил проблему до довольно простого требования: передать из одного пакетного файла в другой, аргумент, который содержит некоторый текст с разделителями-пробелами, один из которых является пробелом . То есть один пакетный файл должен передать некоторую строку 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

Ни одна из этих попыток не работает. Я пытался использовать "\" \"", """ """, """" """", "\"" "\"", ""\" \""", "^" ^"", ^"" "^" и так далее. Либо они печатают двойные двойные кавычки, теряют все после пробела, либо что-то еще (это неправильно).

Есть идеи? Спасибо.

Ответы [ 3 ]

3 голосов
/ 12 апреля 2010

Как насчет этого обходного пути:

caller.bat:

@echo off
echo "A "B C" D">dummy.txt
call callee.bat

callee.bat:

@echo off
set /p argument=<dummy.txt
echo %argument%
pause
1 голос
/ 09 сентября 2011

Я новичок в форуме.Это довольно круто, но никогда не подписывалось до сих пор.

Мне нравится идея вызывать пакет из другого, очень удобно, так что вы можете "упаковать" как можно больше в один файл.

Я знаю, что эта ветка старая и надеюсь, что меня не забанят или что-то в этом роде. Lol

:Example.bat
@echo off

set SOMEARG=%1
set EXAMPLEARG=%2
set EXAMPLEARG=%EXAMPLEARG:""="%
set NEWFOLDER=%3
if not (%1)==() GOTO PRINT

CALL %0 SomeWord "Hey this arg has quoted "" "" spaces!" "C:\Program Files\Folder with spaces\Subfolder"

:PRINT
ECHO.
ECHO %0
ECHO %SOMEARG%
ECHO %EXAMPLEARG%
ECHO %NEWFOLDER%
ECHO.
pause

Это выводит

"C:\SUT_Tools\Scripts\Testing\GLSU\Example.bat"
SomeWord
"Hey this arg has quoted " " spaces!"
"C:\Program Files\Folder with spaces\Subfolder"

Press any key to continue . . .

Надеюсь, это поможет!

Извините за моигрязный сценарий, я не слишком глубоко в программировании;)

1 голос
/ 12 апреля 2010

Это работает

@echo off
if not (%1)==() goto print
:passarg
  call %0 "A "B C" D"
:print
  echo %*
...