File batch per copiare le directory in modo ricorsivo


123

C'è un modo per copiare le directory in modo ricorsivo all'interno di un file .bat? Se è così, un esempio sarebbe fantastico. Grazie.


2
intendi xcopy / s? o il robocopy più avanzato?
rene

Questo potrebbe aiutarti, anche se questo elimina, puoi facilmente cambiare per copiare invece daniweb.com/web-development/threads/61479/…
Georges Chitiga

Risposte:


178

Guarda in xcopy , che copierà ricorsivamente file e sottodirectory.

Ci sono esempi, 2/3 in fondo alla pagina. Di particolare utilizzo è:

Per copiare tutti i file e le sottodirectory (comprese le eventuali sottodirectory vuote) dall'unità A all'unità B, digitare:

xcopy a: b: /s /e


16
Probabilmente si desidera includere anche il flag / y in "Sopprime la richiesta di conferma che si desidera sovrascrivere un file di destinazione esistente".
Matthew Lock

11
'xcopy' non è una buona idea perché sono notoriamente famosi per l'errore di memoria insufficiente . Prova a usare "robocopy"
Rahul

6
@Rahul Hmm davvero? Non l'ho mai visto, ma xcopy è sicuramente in circolazione sin dai tempi bui. Probabilmente potresti farlo anche Copy-Item -Recursein PowerShell.
lc.

1
Purtroppo sì, questo comportamento è molto comune :). Se hai visto ciò accadere in modo ricorrente, in particolare se desideri copiare grandi quantità di dati come gig di dati.
Rahul

10
Questo dice che xcopy è stato deprecato e che dovrebbe essere usato robocopy.
Mike HR

71

Dopo aver letto i commenti della risposta accettata, ho provato il comando robocopy , che ha funzionato per me (utilizzando il prompt dei comandi standard da Windows 7 64 bit SP 1):

robocopy source_dir dest_dir /s /e

5
Non ho mai saputo che "robocopy" fosse un comando integrato in Windows 7! Grazie per la risposta, molto disponibile e potente :)
Anmol Saraf

5
Non /Eimplica /S? copy subdirectories, including Empty ones.
mbomb007

4
Hmmm /Se /Esembrano implicare cose opposte secondo l' /?aiuto di robocopy - s è "non vuote" e è "vuote". Penso che dovresti sceglierne solo uno.
Stuart Brock

1
Per la maggior parte degli utenti, penso che sia sufficiente fare / e (includere directory vuote).
phsource

3
Notare che robocopyrestituisce un codice di uscita di 1 se uno o più file sono stati copiati correttamente.
dougnorton

15

Puoi scrivere un algoritmo ricorsivo in Batch che ti dà il controllo esatto di ciò che fai in ogni sottodirectory annidata:

@echo off
call :treeProcess
goto :eof

:treeProcess
rem Do whatever you want here over the files of this subdir, for example:
copy *.* C:\dest\dir
for /D %%d in (*) do (
    cd %%d
    call :treeProcess
    cd ..
)
exit /b

File batch di Windows che scorre tra le directory per elaborare i file?


4
Ottima idea, ma il tuo programma non copia tutti i file dalle directory di origine in una singola directory di destinazione senza preservare la gerarchia delle cartelle?
Jean-Francois T.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.