xcopy archivos en un solo directorio

21

Me gustaría usar xcopy en una máquina Windows para extraer todos los archivos con extensión .png en un solo directorio.

Lo intenté xcopy C:\folder\*.png /s C:\png\, pero mantiene los subdirectorios dentro de la carpeta \ (por ejemplo, en C: \ png, hay C: \ png \ a \ b \ c \ img.png) que no quiero. Simplemente quiero todo .png dentro de C: \ png sin que retenga la estructura de directorios que estaba en la carpeta C: \.

bobobobo
fuente

Respuestas:

39

Esto se puede hacer con buenos viejos for:

for /r C:\Folder %f in (*.png) do @copy "%f" C:\png

Nada sofisticado.

Joey
fuente
¡Funciona! ¿Te importaría explicar para qué %fsirve?
bobobobo
Es la variable del bucle.
Joey
3
Esto no funcionó para mí, obtuve algo al respecto f" was unexpected at this time. Cambiando %fa %%ftrabajado. Sin embargo, estaba ejecutando esto en un archivo por lotes: si está utilizando el comando FOR en la línea de comandos en lugar de en un programa por lotes, use solo un signo de porcentaje:% G en lugar de %% G. ss64.com/nt/for.html
ta.speot.is
1
Uhm si. Eso es esperado y exactamente como lo citó. ¿De dónde vendría tu confusión?
Joey
1
@kayleeFrye_onDeck: Que yo sepa, no hay variables especiales. Lo único que me viene a la mente es que las personas que no están familiarizadas forpueden confundirse con las dos dcosas diferentes %~dd. La fordocumentación sugiere usar letras mayúsculas para las variables para evitar confusiones, pero las sustituciones siguen siendo claramente distinguibles del nombre de la variable, creo.
Joey
1

Si tiene instalado cygwin, este sería un trabajo para encontrar:

cp `find /cygdrive/c/folder/* -name '*png'` /cygdrive/c/png/

(aunque eso tendrá problemas si alguno de los nombres de archivo tiene espacios en ellos; findsin embargo , encontrará alguna variante de un comando que funcionará en todas las circunstancias)

Si está ejecutando Vista, 2003 o 2008, entonces el "forfiles" menos flexible pero aún útil es su amigo. Algo como:

FORFILES /P c:\folder\ /M *.png /S /C "cmd /c copy @file c:\png\"

Nota: No he probado ninguno de los comandos anteriores, pero en teoría deberían funcionar ...

David Spillett
fuente
+1 acaba de verificar que el comando FORFILES funciona. Lo ejecuté dos veces y copió la segunda vez sin aviso, por lo que supongo que solo se sobrescribe si encuentra duplicados.
hyperslug