2011-09-18 30 views
11

Estoy intentando escribir un archivo Windows Batch que me permita mover todos los directorios dentro de un directorio fuente dado a un directorio objetivo que exista dentro de ese directorio fuente.Comando por lotes de Windows para mover todas las carpetas en un directorio con excepciones

Obviamente, mi comando de movimiento con la necesidad de aplicar solo a los directorios y también excluir el directorio de destino de ser procesado.

¿Esto es posible con un comando por lotes de Windows?

Respuesta

10

Robocopy (presente en versiones recientes de Windows o descargable del WRK) puede hacer esto, solo use el interruptor /xd para excluir el directorio de destino de la copia;

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

Lo sobre múltiples excepciones o directorios múltiples para omitir en movimiento? Mejora tu respuesta al agregar eso también. –

1

Eso no funcionará; recibirá un error que le indicará que el directorio de destino se encuentra dentro del directorio de origen o más, incluso si excluye explícitamente el directorio de destino. Lo que puede hacer es mover los directorios a una ubicación temporal que no está debajo de la fuente y luego moverlos al objetivo.

BTW, utilizando el comando move no le permitirá especificar las carpetas para excluir. Para eso puede usar xcopy, pero tenga en cuenta que va a copiar las carpetas, a diferencia de mover ellas. Si eso es importante, puede eliminar lo que quiera después, solo asegúrese de no eliminar el directorio de destino, que está en el directorio de origen ...

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

Usando robocopy incluido en Windows 7, me encontré con la opción/XD no impidió que la carpeta de origen a partir también de ser trasladado.

Solución:

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

Esto coloca a través de las carpetas de nivel superior y se extiende robocopy para cada uno.

1

NB: Robocopy mencionado anteriormente utilizando la opción/mover copiará los archivos y luego los eliminará de la carpeta fuente en lugar de moviendo los archivos. Esto puede ser crítico si el movimiento de grandes cantidades de archivos de un lugar a otro en el mismo disco (porque movimiento es prácticamente instantánea, mientras que la copia es una operación mucho más lento)

0

Esto funciona para mí:

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

al menos en winserver2012r2, esto solo funciona para mover archivos, pero no subdirectorios, y no cubre ninguna opción para 'excepciones' – quetzalcoatl

Cuestiones relacionadas