调用:ProcessArgs /?产生呼叫帮助而不是调用:ProcessArgs with" /?"

时间:2017-12-28 21:11:46

标签: batch-file

我有一个处理一些命令行选项的脚本,我希望它也可以处理/?和 - ?后者工作正常,但是当我使用/?我得到了呼叫帮助喷出,从不调用子程序。我在这里做了一些搜索,但是在所有那些结果中找不到任何特定于这个问题的东西。

这里最简单的我可以将其剥离为:

@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收到一个参数,我绝对不想发生这种情况。

非常感谢任何线索或解决方法。

谢谢。

2 个答案:

答案 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