Atribuição Variável para argumentos com um loop for [closed]

1

Tudo bem, então, pesquisei um pouco sobre como fazer isso, mas desisti porque simplesmente não consegui encontrar nada.

Então, eu tenho um código (abaixo); Seu objetivo principal é obter 9 argumentos e atribuí-los como uma variável - ignorar o eco e pipping.

A minha pergunta é: Como posso simplificar isso com um loop for ou para que não seja preciso muito código e se possível, tem mais de 9 argumentos

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)
    
por Jared Allard 27.06.2013 / 03:22

3 respostas

6

Sem quaisquer declarações goto 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

Resultado

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

Se você quiser que as aspas removidas dos argumentos que contêm espaços, use set pkg!cnt!=%%~a em vez de set pkg!cnt!=%%a (há um til extra no primeiro caso você não identifique a diferença).

    
por 27.06.2013 / 06:16
2

Isso deve ajudá-lo a alcançar o que você deseja:

@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=

Aqui está um teste disso em um arquivo de lote chamado 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>
    
por 27.06.2013 / 04:01
0

GetAll.cmd:

@set AllArg=%*
@echo %AllArg%

Variável de divisão AllArg de qualquer método.

    
por 27.06.2013 / 05:20