Come fare qualcosa per ogni file in una directory con uno script batch
-
05-07-2019 - |
Domanda
Come si scorre su ogni file in una directory con un file .bat o .cmd?
Per semplicità, fornisci una risposta che fa eco al nome del file o al percorso del file.
Soluzione
Utilizzo della riga di comando:
for /f %f in ('dir /b c:\') do echo %f
Utilizzo file batch:
for /f %%f in ('dir /b c:\') do echo %%f
Aggiorna : se la directory contiene file con spazio nei nomi, è necessario modificare il delimitatore utilizzato dal comando for / f
. ad esempio, puoi usare il pipe pipe.
for /f "delims=|" %%f in ('dir /b c:\') do echo %%f
Aggiornamento 2 : (veloce un anno e mezzo dopo la risposta originale :-)) Se il nome della directory stessa ha uno spazio nel nome, puoi usare usebackq sull'opzione
per
:
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 escape ( ^
):
for /f "usebackq delims=|" %%f in (`dir /b "c:\program files" ^| findstr /i microsoft`) do echo %%f
Altri suggerimenti
In alternativa, utilizzare:
forfiles /s /m *.png /c "cmd /c echo @path"
Il comando forfiles è disponibile in Windows Vista e versioni successive.
Metodo più semplice:
Dalla riga di comando, utilizzare:
for %f in (*.*) do echo %f
Da un file batch (raddoppia il segno di percentuale):
for %%f in (*.*) do echo %%f
Da un file batch con la cartella specificata come primo parametro:
for %%f in (%1\*.*) do echo %%f
Usa
for /r path %%var in (*.*) do some_command %%var
con:
- percorso è il percorso iniziale.
- %% var è un identificatore.
- *. * essendo una maschera di file O il contenuto di una variabile.
- some_command essendo il comando da eseguire con il percorso e var concatenati 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 nascosto / sistema / sola lettura. Se qualcun altro si trova in questa situazione, cd nella directory ed esegui per / f " delims = | " % f in ('forfiles') fa attrib -s -h -r% f
.