我不知道如何知道我的脚本是否用问号(?)调用。
例如,我有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/