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 token

  • skip=n Numero di righe da saltare all'inizio di stringhe di file e di testo

  • eol=; Carattere all'inizio di ogni riga per indicare un commento

  • tokens=n Elementi numerati da leggere da ogni riga o stringa da elaborare

  • usebackq 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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow