在DOS批处理脚本中(需要在Win 200x和Win7环境中运行)我需要将引号中的特定字符传递给另一个可执行文件; e.g。
doparse -delimeter "$"
一般来说,这有效:
CALL CMD /C "doparse -delimeter "$""
不幸的是,我需要将管道字符指定为分隔符(这是一项要求)。我预计以下内容可行:
CALL CMD /C "doparse -delimeter "^|""
但是当我运行脚本时,我看不到这行的任何输出(例如,如果我用一些不存在的名称替换“doparse”,则没有错误消息)。
我尝试过各种各样的转义字符组合,但无法让它工作。可能吗? (不幸的是,必须通过批处理脚本完成)。
由于
答案 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中存在一个错误,因此如果解析器在调用阶段后发现未转义的&
或|<>
,它会立即停止。