faça uma cópia de todos os argumentos em um lote

0

Como os valores% 1,% 2,% 3 ... etc em um lote não podem ser modificados, preciso criar uma cópia dele.

Pergunta:

Q1: How to create a copy in one go?  
    Not like SET cp1=%1, SET cp2=%2, ...etc.

Q2: Can one access the variables in this copy by a for loop, which is similar to
    "FOR %%A IN (%*) DO (...)"
    
por user565739 23.01.2013 / 15:47

3 respostas

1

Eu não consigo descobrir uma maneira realmente limpa de executar o segundo programa (ou arquivo em lote, ou qualquer outro) com a lista de argumentos modificados, mas acredito que tenha 88% do que você quer:

@echo off
setlocal enabledelayedexpansion
set i=0
for %%A in (%*) do (
    set /a i+=1
    echo arg !i! is %%A
    set var!i!=%%A      // This sets var1=%1, var2=%2, …
                        // and, of course, you could modify the values at this point.
)
                        // And at this point, %i% is the number of arguments.
 (Other stuff)
          ︙
for /L %%J in (1, 1, %i%) do (
    call :kludge var%%J           // var%%J is “var1” or “var2” or …
    echo arg %%J is !this_value!  // This iterates through the original args,
                                  // and, of course, you could modify them here, too.
)
 (Other stuff)
          ︙
exit /b

:kludge
set this_value=!%1!
exit /b

    
por 25.01.2013 / 02:59
0

Como alguém menciona SO

%* seems to hold all of the arguments passed to the script.

aqui

Atualização 1:

:loop
@echo %1
shift
if not "%~1"=="" goto loop

Você pode salvá-los todos na variável, por exemplo

SET ARGS_LIST=%*
echo %ARGS_LIST%
    
por 23.01.2013 / 15:54
0

Não sei por que você precisa fazer isso, mas você pode fazer uma cópia dos parâmetros usando:

set parms=%*

O acima funcionará para a maioria das situações, embora existam alguns casos em que irá falhar. Por exemplo, ele falhará se um parâmetro incluir caracteres especiais sem aspas.

Os parâmetros podem ser iterados com segurança usando um loop FOR se e somente se nenhum dos parâmetros contiver * ou ? e todos os parâmetros que contêm espaço ou caracteres especiais forem citados.

for %%P in (%parms%) do ...
    
por 23.01.2013 / 18:48

Tags