好吧,我已经搜索了很多关于如何做到这一点,但我放弃了,因为我根本找不到任何东西。
所以,我有一个代码(如下);它的主要目的是获取 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
任意方法。