我正在尝试获取批处理脚本中传递的参数的数量。我找到了适当的答案here。直到我通过一个带有星号(*)的参数,它才能完美地工作。
argcount.bat
@echo off
setlocal enabledelayedexpansion
set argCount=0
for %%x in (%*) do (
set /A argCount+=1
set "argVec[!argCount!]=%%~x"
)
echo Number of processed arguments: %argCount%
for /L %%i in (1,1,%argCount%) do echo %%i- "!argVec[%%i]!"
用法:
argcount abc def ghi
这给了我3
个参数:abc, def, ghi
argcount abc def *ghi jkl
这也给了我3
args:abc, def, jkl
我应该在哪里获得4
参数:abc def *ghi jkl
问题
如何获得实际的参数计数以及加星号的参数?
答案 0 :(得分:4)
for
旨在循环文件,因此in
子句中的字符串应该是文件名或文件掩码。
如果没有这样的文件名,则将字符串作为字符串处理,但是一旦涉及通配符(*
或?
),该字符串就会发生变化:列表将扩展为所有匹配的文件名(您没有与*ghi
匹配的文件,因此列表仍然为空-请尝试使用*.bat
...)。
因此(尽管很优雅),for
循环并不是您所需要的。而是循环循环遍历您的参数:
@echo off
setlocal enabledelayedexpansion
set argCount=0
:loop
if "%~1" == "" goto :done
set /A argCount+=1
set "argVec[!argCount!]=%~1"
shift
goto :loop
:done
echo Number of processed arguments: %argCount%
for /L %%i in (1,1,%argCount%) do echo %%i- "!argVec[%%i]!"