带有 for 循环的参数的变量赋值

Jar*_*ard 1 powershell batch command-line ms-dos

好吧,我已经搜索了很多关于如何做到这一点的方法,但我已经放弃了,因为我根本找不到任何东西。

所以,我有一个代码(如下);它的主要目的是获取 9 个参数并将它们分配为变量 - 忽略回声和 pipping。

我的问题是:我怎样才能用 for 循环等来简化它,这样它就不需要那么多代码, 如果 可能的话,还有 9 个以上的参数

set pkg1=%1
set pkg2=%2
set pkg3=%3
set pkg4=%4
set pkg5=%5
set pkg6=%6
set pkg7=%7
set pkg8=%8
set pkg9=%9

IF DEFINED pkg1 (echo %1.ini 1> %WINGET_TEMP%\args.rdc 2>nul)
IF DEFINED pkg2 (echo %2.ini 1>> %WINGET_TEMP%\args.rdc 2>nul)
IF DEFINED pkg3 (echo %3.ini 1>> %WINGET_TEMP%\args.rdc 2>nul)
IF DEFINED pkg4 (echo %4.ini 1>> %WINGET_TEMP%\args.rdc 2>nul)
IF DEFINED pkg5 (echo %5.ini 1>> %WINGET_TEMP%\args.rdc 2>nul)
IF DEFINED pkg6 (echo %6.ini 1>> %WINGET_TEMP%\args.rdc 2>nul)
IF DEFINED pkg7 (echo %7.ini 1>> %WINGET_TEMP%\args.rdc 2>nul)
IF DEFINED pkg8 (echo %8.ini 1>> %WINGET_TEMP%\args.rdc 2>nul)
IF DEFINED pkg9 (echo %9.ini 1>> %WINGET_TEMP%\args.rdc 2>nul)
Run Code Online (Sandbox Code Playgroud)

Kar*_*ran 6

没有任何丑陋的goto语句:

@echo off
setlocal enabledelayedexpansion
set cnt=0
for %%a in (%*) do (
  set /a cnt+=1
  set pkg!cnt!=%%a
)
for /l %%a in (1,1,!cnt!) do (
  echo pkg%%a=!pkg%%a!
)
endlocal
Run Code Online (Sandbox Code Playgroud)

输出

C:\>loopbat a b c d e f g h i j k l "m n" o p q r s t u v w x y z
pkg1=a
pkg2=b
pkg3=c
pkg4=d
pkg5=e
pkg6=f
pkg7=g
pkg8=h
pkg9=i
pkg10=j
pkg11=k
pkg12=l
pkg13="m n"
pkg14=o
pkg15=p
pkg16=q
pkg17=r
pkg18=s
pkg19=t
pkg20=u
pkg21=v
pkg22=w
pkg23=x
pkg24=y
pkg25=z
Run Code Online (Sandbox Code Playgroud)

如果您希望从包含空格的参数中删除引号,请使用set pkg!cnt!=%%~a而不是set pkg!cnt!=%%a(如果您没有发现差异,第一个中有一个额外的波浪号)。