如何将 switch `/?` 传递给子例程而不被 `call` 处理?
How to pass switch `/?` over to a sub-routine without being processed by `call`?
假设您有以下代码片段:
@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 /?
.
的时候也会出现同样的问题
How can I pass that argument over to the sub-routine, so that it is only processed there but not by the call command?
参见下面的示例:
@echo off
setlocal enabledelayedexpansion
call :SUB "/?" Hello
exit /b
:SUB
set "ars= %*"
echo %~1 & echo/ & echo !ars: %1=!
exit /b
:: Output
Displays messages, or turns command-echoing on or off.
ECHO [ON | OFF]
ECHO [message]
Type ECHO without parameters to display the current echo setting.
Hello
call
很贪心,连这个都会显示帮助画面
call :sub ^/;;===,,,,,?
但这可以通过辅助变量来完成。
@echo off
set "var=/?"
call :sub %%var%%
exit /B
:sub
echo(Parameter: %*
exit /b
附加信息:
当/?
用作标签时还有其他奇怪的效果,那么/?
可以用于。
@echo off
set "anonymous=/?"
call :%%anonymous%% argument >nul
if "%0"==":/?" (
echo func arg=%1 > con
exit /b
)
echo End
假设您有以下代码片段:
@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 /?
.
How can I pass that argument over to the sub-routine, so that it is only processed there but not by the call command?
参见下面的示例:
@echo off
setlocal enabledelayedexpansion
call :SUB "/?" Hello
exit /b
:SUB
set "ars= %*"
echo %~1 & echo/ & echo !ars: %1=!
exit /b
:: Output
Displays messages, or turns command-echoing on or off.
ECHO [ON | OFF]
ECHO [message]
Type ECHO without parameters to display the current echo setting.
Hello
call
很贪心,连这个都会显示帮助画面
call :sub ^/;;===,,,,,?
但这可以通过辅助变量来完成。
@echo off
set "var=/?"
call :sub %%var%%
exit /B
:sub
echo(Parameter: %*
exit /b
附加信息:
当/?
用作标签时还有其他奇怪的效果,那么/?
可以用于
@echo off
set "anonymous=/?"
call :%%anonymous%% argument >nul
if "%0"==":/?" (
echo func arg=%1 > con
exit /b
)
echo End