2010-11-04 12 views

Respuesta

13

XCOPY está diseñado para trabajar con 'excluyen' listas ... ver más abajo:

dir /b /a-d "source"|findstr /b "aaa" >"%temp%\aaafiles.tmp" 

    xcopy "source" "destination\" /exclude:%temp%\aaafiles.tmp /y 

La primera línea realiza una (directorio) lista DIR de la carpeta fuente , listando archivos en formato desnudo (/b) ignorando los nombres de directorio (/ad). El resultado se canaliza en el comando FINDSTR.

FINDSTR mira a cada nombre de archivo y compara su inicio (/b) con la cadena " aaa".

Si el comienzo de un nombre de archivo coincide con la cadena " AAA", el nombre del archivo es redirigido (escrito) en el fichero de aaafiles.tmp de los usuarios TEMP directorio.

El /b es de vital importancia, ya que no desea excluir archivos tales como theaaafile.txt.

Los XCOPY comando copia los archivos de la carpetaorigen a la carpeta de destino excepto los archivos que se enumeran en aaafiles.tmp.

Se desactivó la solicitud para sobrescribir los archivos existentes (/y).

fuente y destino tendrá que ser reemplazado sus propios foldernames.

+0

gran solución! gracias – eze1981

+2

Sin embargo, es una copia de archivo, no un movimiento. Con archivos grandes, una copia puede ser extremadamente lenta, mientras que un movimiento en el mismo volumen es casi instantáneo. – Adisak

+0

Nota: También encontré útil la opción '/ S' (mostrar el contenido del directorio de forma recursiva). – Antonio

4

Una manera de hacerlo es crear una lista de los archivos de moverse en un temporal archivo. A continuación, utilice el archivo con el comando for. Genere la lista usando findstr.

> dir/b/a-d | findstr /v aaa* > "%temp%\@movelist" 
> for /f %f in (%temp%\@movelist) do move %f ... 

El primer comando obtiene una lista de todos los archivos (sin directorios) en el directorio actual y luego las tuberías de la lista a findstr que excluye (/v) los nombres de archivo que coincidan con el patrón y la coloca en el archivo @movelist en el directorio temporal. El segundo comando sólo toma los resultados por lo que puede hacer lo que quiera con ellos (moverlo).

Probablemente haya una mejor manera de hacerlo en un solo comando sin el archivo temporal, simplemente no sé cómo escribirlo. No estoy seguro de cómo llamar el comando dir desde dentro el comando for. AFAIK solo toma los archivos de programa que existen, no los comandos integrados.

2

Si no le molesta juguetear con el bit de archivo, puede usarlo para copiar y eliminar selectivamente archivos basados ​​en una máscara de archivo.

Mueva (copie y elimine) todos los archivos excepto los que comienzan con "aaa" desde el directorio actual a "dest". También puede especificar la ruta de origen completa.

attrib +a *.* 
attrib -a aaa*.* 
xcopy /a [or /m] *.* dest 
del /aa /q *.* 
2

En algunos casos puede ser más sencilla. Por ejemplo, tuve que copiar recursivamente un montón de directorios pero excluyendo todas las imágenes (PNG y BMP), por lo que simplemente creado un archivo excludeList.txt que contiene:

.png 
.bmp 

y ejecutar

xcopy /S /I <source> <dest> /exclude:c:\excludeList.txt 

Será concuerde con cualquier archivo o directorio que contenga.png, pero no necesariamente que termina por .png. (No investigué si es posible el uso inteligente de comodines o expresiones regulares). No manejar su ejemplo particular (para los que ya tienen una buena respuesta) pero resuelto mi problema, y ​​esta página es lo que encontré cuando busqué en Google en busca de una solución :)

Cuestiones relacionadas