假设您有以下代码段:
@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 /?
的内容时会出现同样的问题。
答案 0 :(得分:1)
call
非常贪心,即使这会显示帮助屏幕
call :sub ^/;;===,,,,,?
但可以使用辅助变量完成。
@echo off
set "var=/?"
call :sub %%var%%
exit /B
:sub
echo(Parameter: %*
exit /b
其他信息:
当/?
用作标签时会产生其他奇怪的效果,/?
可用于anonymous functions。
@echo off
set "anonymous=/?"
call :%%anonymous%% argument >nul
if "%0"==":/?" (
echo func arg=%1 > con
exit /b
)
echo End