Windows批处理问号作为脚本参数

Windows批处理问号作为脚本参数,windows,batch-file,Windows,Batch File,我不知道如何知道调用我的脚本时是否带有问号(?) 例如,我有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 /?

我不知道如何知道调用我的脚本时是否带有问号(?)

例如,我有
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/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 7中的命令行尝试使用反斜杠或双引号引用:\?或者如果第四个参数是问号,“
如果“%4”eq”?”,则返回“
”。请记住,
命令集的
中的问号可以作为通配符使用!谢谢,在我的情况下,
SHIFT
命令更可取。