2012-02-26 14 views
6

Estoy tratando de crear un script por lotes que realice la misma acción para cada parámetro dado. Por ejemplo, dando a los archivos X como parámetros:
script.bat "file1.txt" "file2.txt" "file3.txt" "file4.txt" ... "fileX.txt"
cambiará el nombre a:
"file1.bin" "file2.bin" "file3.bin" "file4.bin" ... "fileX.bin"
Cambiar nombre es sólo un ejemplo, voy a necesitarlo para operaciones más complejas también.
Supongo que debería ser algo así como for each, pero soy nuevo en las secuencias de comandos por lotes.Lote analizar cada parámetro

Me pregunto si tan sólo pudiera incrementar el índice %1 ...

Respuesta

8

Puede utilizar SHIFT para cambiar los parámetros de la izquierda. En otras palabras turno llamando pondrá el segundo parámetro a 1%, el tercero al 2%, etc.

por lo que necesita algo como:

@ECHO OFF 
:Loop 
IF "%1"=="" GOTO Continue 
    ECHO %1 
SHIFT 
GOTO Loop 
:Continue 

Esto sólo imprimirá los argumentos en orden, pero se puede haz lo que quieras dentro del ciclo.

1

Lo que terminé con fue lo siguiente. Tiendo a más de hacer las cosas, pensaba que iba a compartir ...

En la parte superior de mi archivo por lotes tengo el siguiente código ...

Uso:

::-------------------------------------------------------- 
:: Handle parameters 
::-------------------------------------------------------- 
CALL:ChkSwitch bOverwrite "/OVERWRITE" %* 
CALL:ChkSwitch bMerge "/MERGED" %* 

A continuación, en la parte inferior (donde normalmente me pongo todas mis funciones) ...

Función:

::-------------------------------------------------------- 
:: ChkSwitch Function 
::-------------------------------------------------------- 

:ChkSwitch <bRet> <sSwitch> <sParams> (
    SETLOCAL EnableDelayedExpansion 
    SET "switched=0" 

    :ChkSwitchLoop 
    IF "%~3"=="" GOTO ChkSwitchDone 

    IF %~3==%~2 (
     SET "switched=1" 
     GOTO ChkSwitchDone 
    ) 

    SHIFT /3 
    GOTO ChkSwitchLoop 

    :ChkSwitchDone 
) 
( 
    ENDLOCAL 
    SET "%~1=%switched%" 
    EXIT /B 
) 

Para usar esto es simple. Simplemente llama a la función que pasa en una variable que desea cambiar O crear, luego pasa el cambio que está buscando y, por último, pasa todos los parámetros del script.

2

Usted puede hacer algo como esto y sólo tiene que añadir la complejidad que desee:

for %%x in (%*) do (
    echo %%x 
) 
Cuestiones relacionadas