2012-02-26 9 views
6

Sto provando a creare uno script batch che esegua la stessa azione per ogni parametro indicato. Ad esempio, dando X files come parametri:
script.bat "file1.txt" "file2.txt" "file3.txt" "file4.txt" ... "fileX.txt"
li rinominerà a:
"file1.bin" "file2.bin" "file3.bin" "file4.bin" ... "fileX.bin"
Rename è solo un esempio, ho bisogno per operazioni più complesse troppo.
Immagino che dovrebbe essere qualcosa come for each ma sono nuovo negli script batch.Lotto analizza ogni parametro

Mi chiedo solo se solo potessi incrementare %1 indice ...

risposta

8

È possibile utilizzare SHIFT di spostare i parametri di sinistra. In altre parole, chiamando turno metterà il secondo parametro% 1, il terzo al% 2 ecc

quindi è necessario qualcosa di simile:

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

Questo sarà solo stampare gli argomenti in ordine, ma è possibile fai tutto ciò che vuoi all'interno del ciclo.

1

Quello che ho avuto è stato il seguente. Io tendo a più di fare le cose, ho pensato di condividere ...

Nella parte superiore del mio file batch ho il seguente codice ...

Usage:

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

Poi alla il fondo (dove di solito metto tutte le mie funzioni) ...

Funzione:

::-------------------------------------------------------- 
:: 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 
) 

Per utilizzare questo è semplice. Basta chiamare la funzione che passa in una variabile che si desidera modificare OPPURE creare piuttosto che passare il passaggio che si sta cercando e infine passare tutti i parametri dallo script.

2

Si può fare qualcosa di simile e basta aggiungere la complessità che si desidera:

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