从CALL语句中的DOS批处理脚本传递管道字符

时间:2011-03-31 18:51:17

标签: batch-file dos call pipe

在DOS批处理脚本中(需要在Win 200x和Win7环境中运行)我需要将引号中的特定字符传递给另一个可执行文件; e.g。

 doparse -delimeter "$"

一般来说,这有效:

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

不幸的是,我需要将管道字符指定为分隔符(这是一项要求)。我预计以下内容可行:

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

但是当我运行脚本时,我看不到这行的任何输出(例如,如果我用一些不存在的名称替换“doparse”,则没有错误消息)。

我尝试过各种各样的转义字符组合,但无法让它工作。可能吗? (不幸的是,必须通过批处理脚本完成)。

由于

2 个答案:

答案 0 :(得分:3)

以下适用于我:

call delim -delimiter "|"

然后在被调用的批处理中使用它:

setlocal enabledelayedexpansion
set "delim=%~2"
echo Delimiter: !delim!

答案 1 :(得分:0)

这些版本应该有效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中存在一个错误,因此如果解析器在调用阶段后发现未转义的&|<>,它会立即停止。