Come fare qualcosa per ogni file in una directory con uno script batch

Come si esegue l’iterazione su ciascun file in una directory con un file .bat o .cmd?

Per semplicità, fornire una risposta che rispecchi solo il nome del file o il percorso del file.

Utilizzo della riga di comando:

for /f %f in (`dir /bc:\`) do echo %f 

Utilizzo del file batch:

 for /f %%f in (`dir /bc:\`) do echo %%f 

Aggiornamento : se la directory contiene file con spazio nei nomi, è necessario modificare il delimitatore utilizzato dal comando for /f . per esempio, puoi usare il pipe char.

 for /f "delims=|" %%f in ('dir /bc:\') do echo %%f 

Aggiornamento 2 : (rapido un anno e mezzo dopo la risposta originale :-)) Se il nome della directory ha uno spazio nel nome, è ansible utilizzare l’opzione usebackq for :

 for /f "usebackq delims=|" %%f in (`dir /b "c:\program files"`) do echo %%f 

E se è necessario utilizzare il reindirizzamento dell’output o il piping dei comandi, utilizzare il carattere di escape ( ^ ):

 for /f "usebackq delims=|" %%f in (`dir /b "c:\program files" ^| findstr /i microsoft`) do echo %%f 

In alternativa, utilizzare:

 forfiles /s /m *.png /c "cmd /c echo @path" 

Il comando forfiles è disponibile in Windows Vista e Windows 7.

Metodo più semplice:

Dalla riga di comando, utilizzare:

 for %f in (*.*) do echo %f 

Da un file batch (raddoppia i segni%):

 for %%f in (*.*) do echo %%f 

Da un file batch con cartella specificata come 1 ° parametro:

 for %%f in (%1\*.*) do echo %%f 

Uso

 for /r path %%var in (*.*) do some_command %%var 

con:

  • il percorso è il percorso di partenza.
  • %% var è un identificatore.
  • *. * essendo una maschera o il contenuto di una variabile.
  • some_command è il comando da eseguire con il percorso e var concatenato come parametri.

Un altro modo:

 for %f in (*.mp4) do call ffmpeg -i "%~f" -vcodec copy -acodec copy "%~nf.avi" 

Avevo del malware che contrassegnava tutti i file in una directory come hidden / system / readonly. Se qualcun altro si trova in questa situazione, effettua il cd nella directory ed esegui for /f "delims=|" %f in ('forfiles') do attrib -s -h -r %f for /f "delims=|" %f in ('forfiles') do attrib -s -h -r %f .