我有一个处理一些命令行选项的脚本,我希望它也可以处理/?和 - ?后者工作正常,但是当我使用/?我得到了呼叫帮助喷出,从不调用子程序。我在这里做了一些搜索,但是在所有那些结果中找不到任何特定于这个问题的东西。
这里最简单的我可以将其剥离为:
@setlocal ENABLEEXTENSIONS
@set prompt=$G
call :ProcessArgs %*
@exit /b 0
:ProcessArgs
@echo %*
@exit /b 0
当被叫 - ?一切都很好,但/?结果:
>call :ProcessArgs /?
Calls one batch program from another.
CALL [drive:][path]filename [batch-parameters]
batch-parameters Specifies any command-line information required by the
batch program.
...
这对我来说似乎是一个错误,但我怀疑我是否在我的Win10盒子上发现了cmd.exe中的任何新错误。在%*周围使用引号可以避免帮助喷出,但也会导致:ProcessArgs收到一个参数,我绝对不想发生这种情况。
非常感谢任何线索或解决方法。
谢谢。
答案 0 :(得分:2)
这是一个错误,但它可以用作功能(Anonymous functions)。
在您的情况下,您可以通过使用双倍百分比来避免这种行为。
Set "args=%*"
call :ProcessArgs %%args%%"
答案 1 :(得分:2)
我对您的示例脚本进行了两处微小的更改,它适用于Windows 7下的/?
:
@setlocal ENABLEEXTENSIONS
@set prompt=$G
call :ProcessArgs %%*
@exit /b 0
:ProcessArgs
@echo(%*
@exit /b 0
对于通配符参数修饰符%*
,杰布关于以双百分比转义的观点似乎是正确的。并且需要对@echo
进行少量更改,以防止echo
发出help
。