Передайте символ канала из пакетного сценария DOS в операторе CALL - PullRequest
3 голосов
/ 31 марта 2011

в пакетном скрипте DOS (который должен работать в средах Win 200x и Win7) мне нужно передать определенный символ в кавычках другому исполняемому файлу;например,

 doparse -delimeter "$"

В целом это работает:

 CALL CMD /C "doparse -delimeter "$""

К сожалению, мне нужно указать символ канала в качестве разделителя (это требование).Я ожидал, что сработает следующее:

 CALL CMD /C "doparse -delimeter "^|""

Но когда я запускаю сценарий, я не вижу никаких выходных данных для этой строки (например, нет сообщения об ошибке, если я заменяю "doparse" каким-то несуществующимимя).

Я пробовал различные комбинации escape-символов, но не могу заставить его работать.Является ли это возможным?(К сожалению, это нужно сделать с помощью пакетного скрипта).

Спасибо

Ответы [ 2 ]

3 голосов
/ 31 марта 2011

У меня работает следующее:

call delim -delimiter "|"

и затем использование его в вызываемой партии следующим образом:

setlocal enabledelayedexpansion
set "delim=%~2"
echo Delimiter: !delim!
0 голосов
/ 31 марта 2011

Эти версии должны работать cmd /c "test2.bat "^|"" и cmd /c ^"test2.bat "|"".
Оба запускают test2.bat.

Также работает версия Joey.

В вашем случае проблема заключается в call и количестве кавычек. Нельзя экранировать специальные символы в выражении call (вне кавычек), по крайней мере, без специального трюка с кареткой.

Пример

set "caret=^"
call echo &
call echo ^&
call echo ^^&
call echo ^^^&
call echo "&"
call echo %%caret%%^&

Только последние две работы, первая находится внутри кавычек, а вторая экранирует & во втором запуске парсера с помощью специального трюка с кареткой.

В вашем случае | находится вне кавычек (это после второй кавычки).
И есть ошибка в cmd.exe, поэтому он немедленно останавливается, если синтаксический анализатор обнаруживает неоткрытый & или |<> после фазы вызова.

...