【发布时间】:2016-12-18 21:44:58
【问题描述】:
假设你有以下代码sn-p:
@echo off
call :SUB /?
exit /B
:SUB
>&2 echo %*
exit /B
call 命令识别/? 开关并显示其帮助消息。我怎样才能将该参数传递给子例程,以便它只在那里处理而不是由call 命令处理?是否有一个聪明的转义序列来实现这一点?
到目前为止,我尝试了一些转义序列,如call :SUB ^/?、call :SUB /^?、call :SUB ^/^?、call :SUB^ /?,以及奇怪的语法call :SUB(/?(它不会引发语法错误,令人惊讶;类似于广泛使用的安全 echo() 的语法,但到目前为止还没有运气。
在命令提示符下,写call echo /?之类的东西也会出现同样的问题。
【问题讨论】:
-
call :SUB "/?",如果您可以接受引号或可以在子例程中使用%~1。 -
好主意,@Stephan,但这只有在
/?是唯一参数时才有效... -
这就是为什么它是评论,而不是答案。
;) -
这仅在 /?是唯一的论点。 这取决于您的子例程。如果你想回显所有参数,它会。但是,如果您想分别回显每个 arg,它也可以,例如:
set "ars= %*" & echo %~1 !ars: %~1=! -
@sambul35,我在子程序中使用了
echo作为例子;问题是call自己消耗/?...
标签: batch-file cmd escaping call