批处理脚本如何正确引用%10及以上的位置参数?
批处理读取10个及以上位置参数的解决方案
批处理原生语法仅支持直接引用%1~%9共9个位置参数,直接写%10会被解析为%1的返回值拼接字符0,无法正常读取第10个参数,可通过以下两种方案实现多参数读取:
方案1:使用shift命令逐个遍历参数
shift命令的作用是将所有位置参数左移一位,执行一次后原%2变为%1,原%10变为%9,以此类推,适合按顺序逐个处理参数的场景。
示例代码(temp.bat)
@echo off setlocal enabledelayedexpansion set /a arg_index=0 :param_loop if "%~1"=="" goto loop_end set /a arg_index+=1 :: 此处可直接对当前参数%1做业务处理,也可存入变量后续调用 echo 第!arg_index!个参数:%~1 shift goto param_loop :loop_end echo 总参数个数:!arg_index! endlocal exit /b
小提示:如果需要保留前N个参数不被位移,可以使用
shift /N,例如执行shift /2会保留%1不变,从%2开始左移参数。
方案2:使用for遍历%*批量存储参数
如果需要随机调用任意位置的参数,可以将所有参数存入类数组变量,后续可以直接按下标读取任意位置的参数。
示例代码(temp.bat)
@echo off setlocal enabledelayedexpansion set /a arg_count=0 :: 遍历全部参数并存入数组 for %%a in (%*) do ( set /a arg_count+=1 set "arg[!arg_count!]=%%~a" ) :: 演示读取任意位置参数 echo 第10个参数:!arg[10]! echo 第20个参数:!arg[20]! echo 总参数个数:!arg_count! endlocal exit /b
内容的提问来源于stack exchange,提问作者JustenDouma
相关产品推荐
相关产品推荐

