Windows BATCH问号作为脚本参数

时间:2017-09-01 20:19:04

标签: windows batch-file

我无法弄清楚如何知道我的脚本是否带有问号(?)

例如我有run.bat a b c ?

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

这打印如下,请注意问号未注册为第4个参数

a
b
c
3

我还尝试使用以下变体调用它,问号只是无法检测到。

run.bat a b c ?
run.bat a b c -?
run.bat a b c /?

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

1 个答案:

答案 0 :(得分:3)

如评论中所述,普通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
相关问题