2011-09-18 7 views
11

Sto provando a scrivere un file di Windows Batch che consentirà di spostare tutte le directory all'interno di una determinata directory di origine in una directory di destinazione che esiste all'interno di tale directory di origine.Comando batch di Windows per spostare tutte le cartelle in una directory con le eccezioni

Ovviamente il mio comando di spostamento con deve solo essere applicato alle directory ed anche escludere la directory di destinazione dall'elaborazione.

Ciò è possibile con un comando batch di Windows?

risposta

10

Robocopy (presente nelle versioni recenti di Windows o scaricabile dal WRK) può fare questo, basta usare lo switch /xd per escludere la directory di destinazione dalla copia;

robocopy c:\source\ c:\source\target\ *.* /E /XD c:\source\target\ /move 
+0

Cosa su più eccezioni o più directory da saltare in movimento? Migliora la tua risposta aggiungendo anche quella. –

1

Che non funzionerà - riceverai un errore che ti dice che la directory di destinazione si trova all'interno della directory di origine o così, anche se escludi esplicitamente la directory di destinazione. Quello che puoi fare è spostare le directory in una posizione temporanea che non è sotto la fonte, quindi spostarle nella destinazione.

BTW, utilizzando il comando move non consente di specificare le cartelle da escludere. Per questo è possibile utilizzare xcopy, ma si noti che sarà copia le cartelle, al contrario di spostare loro. Se ciò è importante, è sufficiente eliminare la directory di destinazione, che si trova nella directory di origine ...

7
FOR /d %%i IN (*) DO IF NOT "%%i"=="target" move "%%i" target 
1

Utilizzando robocopy incluso con Windows 7, ho trovato l'opzione/XD non ha impedito alla cartella di origine da anche essere spostato.

Soluzione:

SET MoveDirSource=\\Server\Folder 
SET MoveDirDestination=Z:\Folder 
FOR /D %%i IN ("%MoveDirSource%\*") DO ROBOCOPY /MOVE /E "%%i" "%MoveDirDestination%\%%~nxi" 

Questo loop attraverso le cartelle di livello superiore e corre robocopy per ciascuno.

1

NB: Robocopy menzionato sopra utilizzando il flag/move copia i file e quindi li elimina dalla cartella di origine anziché spostando i file. Questo può essere importante se lo spostamento di grandi quantità di file da una posizione a un'altra sullo stesso disco (perché mossa è praticamente istantanea, mentre la copia è un'operazione molto più lento)

0

questo funziona per me:

move c:\fromDir\*.* c:\toDir\ 
+0

almeno su winserver2012r2, funziona solo per lo spostamento di file, ma non per le sottodirectory e non copre alcuna opzione per "eccezioni" – quetzalcoatl