batch-file
Per cicli in file batch
Ricerca…
Sintassi
- per / l %% p in (startNumber, increment, endNumber) do comando
- per / f %% p in (nomefile) do comando
- per / f %% p in ("textStrings") comando do
- per / f %% p in ('comando') comando do
- per / r drive: \ path %% p nel comando (set) do
- per / d %% p nel comando (directory) do
Osservazioni
Il comando for
accetta opzioni quando viene usato il flag /f
. Ecco un elenco di opzioni che possono essere utilizzate:
delims=x
Delimitatore carattere (s) per separare tokenskip=n
Numero di righe da saltare all'inizio di stringhe di file e di testoeol=;
Carattere all'inizio di ogni riga per indicare un commentotokens=n
Elementi numerati da leggere da ogni riga o stringa da elaborareusebackq
Usa un altro stile di quotatura:Usa virgolette per nomi di file lunghi in "file"
Utilizza le virgolette singole per "textStrings"
Usa le virgolette posteriori per `comando`
Looping di ogni riga in un set di file
Quanto segue farà eco ad ogni riga nel file C:\scripts\testFile.txt
. Le righe vuote non verranno elaborate.
for /F "tokens=*" %%A in (C:\scripts\testFile.txt) do (
echo %%A
rem do other stuff here
)
L'esempio più avanzato mostra come il ciclo FOR derivato da un set di file limitato può essere utilizzato per reindirizzare l'esecuzione batch, salvando il contenuto cercato in un file:
@echo off
setlocal enabledelayedexpansion
for /f %%i in ('dir "%temp%\test*.log" /o:-d /t:w /b') do (
set "last=%temp%\%%i"
type !last! | find /n /i "Completed" >nul 2>&1 >> %temp%\Completed.log ^
&& (echo Found in log %%i & goto :end) || (echo Not found in log %%i & set "result=1"))
:: add user tasks code here
if defined result echo Performing user tasks...
:end
echo All tasks completed
exit /b
Nota, per quanto tempo le stringhe di comando sono divise in diverse code line e i gruppi di comandi sono separati da parentesi.
Visita in modo ricorsivo le directory in un albero delle directory
for /r
comando for /r
può essere utilizzato per visitare in modo ricorsivo tutte le directory in un albero di directory ed eseguire un comando.
@echo off
rem start at the top of the tree to visit and loop though each directory
for /r %%a in (.) do (
rem enter the directory
pushd %%a
echo In directory:
cd
rem leave the directory
popd
)
Gli appunti:
- per / r - Loop through files (Recurse subfolders).
- pushd - Modifica la directory / cartella corrente e memorizza la cartella / percorso precedente per l'uso con il comando POPD.
- popd - Cambia la directory sul percorso / cartella più recente memorizzata dal comando PUSHD.
Rinominare tutti i file nella directory corrente
Quanto segue utilizza una variabile con un ciclo for
per rinominare un gruppo di file.
SetLocal EnableDelayedExpansion
for %%j in (*.*) do (
set filename=%%~nj
set filename=!filename:old=new!
set filename=Prefix !filename!
set filename=!filename! Suffix
ren "%%j" "!filename!%%~xj"
)
Definendo il nome della variabile %%j
e associandolo a tutti i file correnti (*.*)
, Possiamo usare la variabile in un ciclo for
per rappresentare ogni file nella directory corrente.
Ogni iterazione (o passaggio) attraverso il ciclo elabora quindi un file diverso dal gruppo definito (che potrebbe essere stato ugualmente un qualsiasi gruppo, ad esempio *.jpg
o *.txt
).
Nel primo esempio, sostituiamo il testo: la stringa di testo "vecchio" è sostituita dalla stringa di testo "nuovo" (se, ma solo se, il testo "vecchio" è presente nel nome del file).
Nel secondo esempio, aggiungiamo del testo: il testo "Prefisso" viene aggiunto all'inizio del nome del file. Questa non è una sostituzione. Questa modifica verrà applicata a tutti i file nel gruppo.
Nel terzo esempio, di nuovo aggiungiamo del testo: il testo "Suffisso" viene aggiunto alla fine del nome del file. Ancora una volta, questa non è una sostituzione. Questa modifica verrà applicata a tutti i file nel gruppo.
La linea finale gestisce effettivamente la ridenominazione.
Iterazione
for /L %%A in (1,2,40) do echo %%A
Questa riga verrà iterata da 1 a 39, aumentando di 2 ogni volta.
Il primo parametro, 1
, è il numero iniziale.
Il secondo parametro, 2
, è l'incremento.
Il terzo parametro, 40
, è il massimo.