使用 for 循环对参数进行变量赋值

使用 for 循环对参数进行变量赋值

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

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

我的问题是:我怎样才能用 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)

答案1

沒有任何丑陋声明:

@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

输出

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

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

答案2

这应该可以帮助你实现你的目标:

@echo off
set i=1

:again
rem use %~1 to remove any potential surrounding quotes (")
if "%~1"=="" goto end
set pkg%i%=%~1

set /a i+=1
shift
goto again

:end
set i=

以下是在批处理文件 doit.bat 中对此进行的测试:

C:\Users\johnma>doit a b c d "e f" g hi j k l mn o p

C:\Users\johnma>set
.
.
.
pkg1=a
pkg10=l
pkg11=mn
pkg12=o
pkg13=p
pkg2=b
pkg3=c 
pkg4=d
pkg5=e f
pkg6=g
pkg7=hi
pkg8=j
pkg9=k
.
.    
C:\Users\johnma>

答案3

获取全部.cmd:

@set AllArg=%*
@echo %AllArg%

分割变量AllArg任意方法。

相关内容