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
命令更可取。