Ms-Dos - Recorrer varias carpetas y si hay archivos copiarlos en otra carpeta

 
Vista:
sin imagen de perfil

Recorrer varias carpetas y si hay archivos copiarlos en otra carpeta

Publicado por Toni (10 intervenciones) el 15/11/2021 17:47:26
Buenas tardes:
Tengo, por ejemplo, en C:\ Descargas varias carpetas con o sin ficheros.
Quiero recorrer cada una de las carpetas contenidas en C:\ Descargas y si hay algún fichero copiarlo en,
por ejemplo, C:\ Copias.
Se trataría de hacer un fichero bat que realizase lo indicado.
Gracias y saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Recorrer varias carpetas y si hay archivos copiarlos en otra carpeta

Publicado por Antoni Masana (811 intervenciones) el 15/11/2021 21:14:35
Pregunta: ¿Quieres copiar los ficheros con la misma estructura de directorios?

Esta es la solución:

1
2
3
@echo off
cd /D C:\Descargas
xcopy *.* c:\Copias /S

En caso contrario:

1
2
3
@echo on
cd  /D C:\Descargas
FOR /D %%a in (*) do copy %%a\*.* C:\Copias /Y 2>nul

Valido para esta estructura.

1
2
3
4
5
6
C:\Descargas>tree
Listado de rutas de carpetas
C:.
├───A1
├───A2
└───A3

Para estas estructuras no sirve:

1
2
3
4
5
6
7
C:\Descargas>tree
Listado de rutas de carpetas
C:.
├───A1
│   └───B1
├───A2
└───A3

1
2
3
4
5
6
7
8
C:\Descargas>tree
Listado de rutas de carpetas
C:.
├───A1
│   └───B1
│       └───C1
├───A2
└───A3

Se puede complicar más si hay subdirectorios dentro de los subdirectorios, pero si no es necesario no vale la pena.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Recorrer varias carpetas y si hay archivos copiarlos en otra carpeta

Publicado por ANTONIO GIMÉNEZ (10 intervenciones) el 16/11/2021 10:24:48
Buenos días:
Gracias por su respuesta. La estudiaré y ya diré algo
Saludos
Antonio Giménez
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Recorrer varias carpetas y si hay archivos copiarlos en otra carpeta

Publicado por Toni (10 intervenciones) el 16/11/2021 17:45:00
La primera solución funciona pero no consigo lo que quiero porque me he explicado mal. La estructura correcta
sería la siguiente: En la carpeta A1 está el fichero B1. En A2 está el fichero B2, etc.
Se trataría de recorrer las carpetas A1, A2, A3 y copiar los ficheros: B1, B2, B3... en C:\Copias

C:.
├───A1
│ └───B1
├───A2
└───A3

Saludos
Antonio Giménez
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Recorrer varias carpetas y si hay archivos copiarlos en otra carpeta

Publicado por Antoni Masana (811 intervenciones) el 17/11/2021 14:55:58
Creo que no me he explicado bien.

El XCOPY te copia la arbol de directorios del origen al destino.

El FOR copia los ficheros del primer nivel de directorios al raiz del destino. Es capaz de leer esta estructura de directorios:

1
2
3
4
5
6
C:\Descargas>Tree
Listado de rutas de carpetas
C:.
├───Directorio_1
├───Directorio_2
└───Directorio_3

Los directorios de segundo nivel no los lee.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
C:\Descargas>Tree
Listado de rutas de carpetas
C:.
├───Directorio_1
│   ├───Directorio_1_1
│   ├───Directorio_1_2
│   └───Directorio_1_3
├───Directorio_2
│   ├───Directorio_2_1
│   ├───Directorio_2_2
│   └───Directorio_2_3
└───Directorio_3
    ├───Directorio_3_1
    ├───Directorio_3_2
    └───Directorio_3_3

Dicho de otra forma copia estos ficheros:

1
2
3
4
5
6
7
8
9
10
11
12
C:\Descargas\File_00A
C:\Descargas\File_00B
C:\Descargas\File_00C
C:\Descargas\Directorio_1\File_1A
C:\Descargas\Directorio_1\File_1B
C:\Descargas\Directorio_1\File_1C
C:\Descargas\Directorio_2\File_2A
C:\Descargas\Directorio_2\File_2B
C:\Descargas\Directorio_2\File_2C
C:\Descargas\Directorio_3\File_3A
C:\Descargas\Directorio_3\File_3B
C:\Descargas\Directorio_3\File_3C


Estos no los copia:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
C:\Descargas\Directorio_1\Directorio_1_1\File_11A
C:\Descargas\Directorio_1\Directorio_1_1\File_11B
C:\Descargas\Directorio_1\Directorio_1_1\File_11C
C:\Descargas\Directorio_1\Directorio_1_2\File_12A
C:\Descargas\Directorio_1\Directorio_1_2\File_12B
C:\Descargas\Directorio_1\Directorio_1_2\File_12C
C:\Descargas\Directorio_1\Directorio_1_3\File_13A
C:\Descargas\Directorio_1\Directorio_1_3\File_13B
C:\Descargas\Directorio_1\Directorio_1_3\File_13C
C:\Descargas\Directorio_2\Directorio_2_1\File_21A
C:\Descargas\Directorio_2\Directorio_2_1\File_21B
C:\Descargas\Directorio_2\Directorio_2_1\File_21C
C:\Descargas\Directorio_2\Directorio_2_2\File_22A
C:\Descargas\Directorio_2\Directorio_2_2\File_22B
C:\Descargas\Directorio_2\Directorio_2_2\File_22C
C:\Descargas\Directorio_2\Directorio_2_3\File_23A
C:\Descargas\Directorio_2\Directorio_2_3\File_23B
C:\Descargas\Directorio_2\Directorio_2_3\File_23C
C:\Descargas\Directorio_3\Directorio_3_1\File_31A
C:\Descargas\Directorio_3\Directorio_3_1\File_31B
C:\Descargas\Directorio_3\Directorio_3_1\File_31C
C:\Descargas\Directorio_3\Directorio_3_2\File_32A
C:\Descargas\Directorio_3\Directorio_3_2\File_32B
C:\Descargas\Directorio_3\Directorio_3_2\File_32C
C:\Descargas\Directorio_3\Directorio_3_3\File_33A
C:\Descargas\Directorio_3\Directorio_3_3\File_33B
C:\Descargas\Directorio_3\Directorio_3_3\File_33C


Para copiar estos se tendría que complicar un poco más el for y hacerlo recursivo y no se si se puede.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Recorrer varias carpetas y si hay archivos copiarlos en otra carpeta

Publicado por Antoni Masana (811 intervenciones) el 17/11/2021 16:09:41
Otra opción:

1
2
3
@echo on
cd /d C:\Descargas
for /f %%a in ('dir /s /b /a-d') do copy %%a C:\Copias /Y 2>nul

Esto copia todos los ficheros.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Recorrer varias carpetas y si hay archivos copiarlos en otra carpeta

Publicado por Toni (10 intervenciones) el 18/11/2021 11:37:15
Buenos días:
Primero de todo darle las gracias por su tiempo.
Al final ha funcionado pero he tenido que modificar los nombres de las carpetas contenidas en descargas a una sola palabra, y lo mismo para los ficheros contenidos en dichas carpetas
IMG_20211118_113343

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Recorrer varias carpetas y si hay archivos copiarlos en otra carpeta

Publicado por Antoni Masana (811 intervenciones) el 18/11/2021 14:20:43
Para el caso de nombres con espacios:

1
2
3
@echo on
cd /d "C:\Descargas Origen"
for /f "delims=*" %%a in ('dir /s /b /a-d') do copy "%%a" "C:\Copias Destino\." /Y 2>nul

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Recorrer varias carpetas y si hay archivos copiarlos en otra carpeta

Publicado por Toni (10 intervenciones) el 18/11/2021 17:35:32
Buenas tardes:
El script funciona perfectamente por lo que le doy mil gracias.
El problema principal ya está resuelto;
Planteo uno secundario:
Los ficheros contenidos en cualquiera de las carpetas que cuelgan de Descargas pueden tener dos extensiones, por ejemplo,
*.m4a o *.ogg. Objetivo: Los ficheros *.ogg hay que copiarlos en Copiasogg y los otros en Copiasm4a.
Variante:
Las carpetas de Descargas cuyos ficheros ya han sido copiados deben borrarse
Saludos
Antonio Giménez
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Recorrer varias carpetas y si hay archivos copiarlos en otra carpeta

Publicado por Antoni Masana (811 intervenciones) el 18/11/2021 19:05:47
Solución al planteamiento y la variante:

1
2
3
4
@echo on
cd /d "C:\Descargas Origen"
for /f "delims=*" %%a in ('dir *.ogg /s /b /a-d') do move "%%a" "C:\Copiasogg\." /Y 2>nul
for /f "delims=*" %%a in ('dir *.m4a /s /b /a-d') do move "%%a" "C:\Copiasm4a\." /Y 2>nul

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Recorrer varias carpetas y si hay archivos copiarlos en otra carpeta

Publicado por Toni (10 intervenciones) el 18/11/2021 20:16:06
Otra vez muchas gracias

por cierto ¿qué significa 2>nul?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Recorrer varias carpetas y si hay archivos copiarlos en otra carpeta

Publicado por Antoni Masana (811 intervenciones) el 18/11/2021 21:03:20
Si pones >nul no muestra los mensajes, en este caso 1 archivo copiado.
Si pones 2>nul no muestra los mensajes de error si los hay.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Recorrer varias carpetas y si hay archivos copiarlos en otra carpeta

Publicado por Toni (10 intervenciones) el 27/11/2021 18:51:05
Buenas tardes:
PERPLEJIDAD¡¡¡¡
Después de decirle que todo funcionaba, regresé al cabo de unas semanas y el .bat ya no funcionaba. ?¿?¿
Tras varias pruebas he dado con la solución: suprimir en la sentencia For el parámetro /y.

Así funciona:
@echo on
cd /d "C:\Users\usuario\Desktop\despru"
dir *.m4a /s /b /a-d
for /f "delims=*" %%a in ('dir *.m4a /s /b /a-d') do move "%%a" "C:\Users\usuario\Desktop\copiasm4a\." >nul
for /f "delims=*" %%a in ('dir *.ogg /s /b /a-d') do move "%%a" "C:\Users\usuario\Desktop\copiassogg\." >nul
pause

¿Alguna explicación?

Al intentar averiguar dónde se encontraba el fallo se me ocurrió sustituir en la línea del For: do move por @echo %%a con la idea
de ver el valor de %%a. Por supuesto que deba error.

Saludos
Antonio Giménez
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Recorrer varias carpetas y si hay archivos copiarlos en otra carpeta

Publicado por Antoni Masana (811 intervenciones) el 28/11/2021 15:12:49
No me di cuenta del /Y y al cambiar el COPY por el MOVE tenia que haberlo quitado.

El /Y es para que cuando copie y exista en el destino un fichero igual no pregunte Desea sobreescribir? y continúe la copia.

También puede ser el tipo de comillas dentro del paréntesis.


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Recorrer varias carpetas y si hay archivos copiarlos en otra carpeta

Publicado por Toni (10 intervenciones) el 28/11/2021 18:12:06
Aclarado, gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar