我不知道如何知道我的脚本是否用问号(?)调用。
例如,我有run.bat a b c ?

SET /A argCount=0
FOR %%x IN (%*) DO (
    SET /A argCount+=1
    ECHO %%x
)
ECHO %argCount%

如下打印,注意问号不作为第四个参数注册。
a
b
c
3

我还试着用下面的变体来称呼它,这个问号是不可检测的。
run.bat a b c ?
run.bat a b c -?
run.bat a b c /?

如何检测脚本参数是否有问号?

最佳答案

如注释中所述,普通FOR将括号内的内容视为一组文件,其中*和?是通配符。
为了避免这种情况,您可以将其视为字符串,并使用FOR /F令牌解析和循环,或者可以使用经典的SHIFT命令枚举参数:

@echo off
call :testbatch_recursiveFor a b c ?
ECHO %argCount%

call :testbatch_shift a b c ?
ECHO %argCount%
goto :EOF


:testbatch_recursiveFor
IF "%~1" == "" SET /A argCount=0
FOR /F "tokens=1,*" %%x IN ("%*") DO (
    ECHO arg:%%x
    CALL %0 %%y
    SET /A argCount+=1
)
GOTO :EOF

:testbatch_shift
SET /A argCount=0
:testbatch_shift_loop
IF NOT "%~1" == "" (
    ECHO arg:%1
    SET /A argCount+=1
    SHIFT
    GOTO testbatch_shift_loop
)
GOTO :EOF

关于windows - Windows BATCH问号作为脚本参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46007479/

10-11 17:11