Ms-Dos - Crear archivo .BAT

 
Vista:
sin imagen de perfil
Val: 19
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Crear archivo .BAT

Publicado por Jose (10 intervenciones) el 13/06/2018 10:02:40
Hola gente:
Lo que tengo que hacer es crear un archivo .bat que busque exactamente 7 archivos concretos con extension .xls, que estan en varias carpetas con diferentes nombres y copiarlos en un servidor ftp utilizando WinSCP y no logro hacerlo. (Los archivos tienen el mismo nombre en todas las carpetas)
Si me podeis ayudar os lo agradezco
Gracias
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
sin imagen de perfil
Val: 19
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Crear archivo .BAT

Publicado por Jose (10 intervenciones) el 13/06/2018 17:18:36
Así no me sale.... (Guardo en A1 el nombre de los archivos a copiar)
1
2
3
4
5
6
7
@Echo off
SET A=A1.txt
SET B=B2.txt
TYPE nul >%B2%
CD \G:\
FOR /F "delims=*" %%a in (%A1%) do dir "%%a" /S /B >>%A2%
FOR /F "delims=*" %%a in (%A2%) do copy "%%a" H:\
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

Crear archivo .BAT

Publicado por Antoni Masana (811 intervenciones) el 14/06/2018 10:23:52
Te comento los fallos en tu código.

1
2
3
4
5
@Echo off
SET TMP=C:\Temp\Temporal.txt
[DIR G:\{Nombre_Archivo_a_buscar}.xls* /S /B >%TMP%
FOR /F "delims=*" %%a in ([b]%TMP%) do copy "%%a" H:\
del %TMP%

Estas cuatro líneas en principio hacen lo siguiente

1.- Desactiva el eco del comando.
2.- Define una variable para el fichero Temporal.
3.- Busca el fichero en todos los directorios y subdirectorios del disco G: y devuelve: Ruta + Fichero. lo guarda en Temporal.
4.- Copia los ficheros encontrados al Disco H:
5.- Borra el temporal.

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
sin imagen de perfil
Val: 19
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Crear archivo .BAT

Publicado por Jose (10 intervenciones) el 18/06/2018 11:04:38
Gracias por la respuesta, pero lo que quiero exactamente es que recorra un arbol de archivos, busque los archivos que quiero en concreto y los copie al ftp en sus carpetas correspondientes, sin pedirme confirmacion al copiarlos he modificado el codigo y casi me sale pero no lo consigo...

1
2
3
4
5
6
7
@Echo off
SET Lis_1=Lista_1.txt    //aqui pongo los archivos que quiero que me copie
SET Lis_2=Lista_2.txt
TYPE nul >%Lis_2%
CD \C:\Datos\
FOR /F "delims=*" %%a in (%Lis_1%) do dir  "%%a" /S /B >>%Lis_2%
FOR /F "delims=*" %%a in (%Lis_2%) do xcopy "%%a" /E FTP
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
Val: 19
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Crear archivo .BAT

Publicado por Jose (10 intervenciones) el 18/06/2018 12:55:13
De los archivos que pongo en Lista _1 solo me lee el primero de los 7
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

Crear archivo .BAT

Publicado por Antoni Masana (811 intervenciones) el 19/06/2018 07:28:36
Tienes varias cosas que deberías corregir.

1
2
3
4
5
6
7
@Echo off
SET Lis_1=C:\Tmp\Lista_1.txt
SET Lis_2=C:\Tmp\Lista_2.txt
TYPE nul >%Lis_2%
CD C:\Datos\
FOR /F "delims=+" %%a in (%Lis_1%) do dir  "%%a" /S /B >>%Lis_2%
FOR /F "delims=+" %%a in (%Lis_2%) do xcopy "%%a" /E FTP

Crea los ficheros temporales en un directorio FIJO.
Cuando creas Lista_2.txt vacío estas en un directorio sin especificar.
Al ejecutar el FOR estas en otro diferente y al ejecutar el segundo FOR ya no se sabe donde estas.
En el cambio de directorio tienes un error de sintaxis.
Cambia el delims, si pones un asterisco no funcionara al querer buscar por ejemplo *.doc* o *.xls* o Facturas*.pdf

El XCOPY copia los ficheros a un directorio C:\DATOS\FTP y no los envia ni por FTP ni por WinScp a ningún servidor.

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
sin imagen de perfil
Val: 19
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Crear archivo .BAT

Publicado por Jose (10 intervenciones) el 19/06/2018 10:48:02
Gracias por la respuesta, he aplicado los cambios, creado las carpetas temporales y he especificado una ruta de prueba en C: para que los copie ahi, pero sigue sin funcionar, ya que no busca en el arbol de carpetas y crea los archivos en sus carpetas correspondientes...
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

Crear archivo .BAT

Publicado por Antoni Masana (811 intervenciones) el 19/06/2018 12:34:14
En primer lugar debemos asegurarnos de que después del CD estamos en el sitio indicado. Si se cambia de disco hay dos opciones
1
CD /D C:\Datos

y la que siempre ha funcionado:
1
2
C:
CD \Datos

En segundo lugar debería ver el contenido del fichero C:\Tmp\Lista_1.txt
Y el contenido del directorio C:\Datos que se puede conseguir con
1
2
3
C:
CD \Datos
DIR /S /B >C:\Tmp\Lista_0.txt

Con estos dos ficheros podre ver donde falla el primer FOR. Cuando este funcione hablamos del segundo FOR.

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
sin imagen de perfil
Val: 19
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Crear archivo .BAT

Publicado por Jose (10 intervenciones) el 21/06/2018 11:04:44
Buenas y gracias por el interés, la verdad es que hacía muchísimos años que no hacia un archivo .bat…
He estado leyendo tutoriales y tocando el código, pero cada vez me lio más…
Tampoco estoy seguro de haberlo explicado bien, por si acaso lo aclaro.
El programa lo que debe hacer es buscar exactamente 3 archivos llamados 1.xls, 2.xls y 3.xls que se encuentran en varias carpetas dentro de otra carpeta y copiarlos a otra carpeta con sus subdirectorios correspondientes y en caso de que ya existan, sobreescribir solo esos archivos…
He estado probando varias opciones, pero cada vez me lio más, si me puede echar un cable se lo agradezco, sobre todo a entender cómo funciona, gracias.

Esto es lo último que he probado y no hay manera de que funcione...

1
2
3
4
5
6
7
@Echo off
SET Lis_1=C: \Tmp\Lista_1.txt
SET Lis_2=C: \Tmp\Lista_2.txt
TYPE nul >%Lis_2%
CD C:\Datos
FOR /F "delims=+" %%a in (%Lis_1%) do dir  "%%a" /S /B >>%Lis_2%
FOR /F "delims=+" %%a in (%Lis_2%) do xcopy "%%a" /E  C:\Desktop\Prueba
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
Val: 19
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Crear archivo .BAT

Publicado por Jose (10 intervenciones) el 21/06/2018 11:31:46
Se me olvidó comentar que los archivos .xls tienen el nombre en mayusculas: Archivo1.xlc, Achivo2.xls...
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

Crear archivo .BAT

Publicado por Antoni Masana (811 intervenciones) el 21/06/2018 23:16:56
Repito, visto que no funciona necesito:

El contenido del fichero C:\Tmp\Lista_1.txt ( para saber que buscas)

El contenido del directorio C:\Datos (Para saber donde buscas) que se puede conseguir con:
1
2
3
C:
CD \Datos
DIR /S /B >C:\Tmp\Lista_0.txt

Con los ficheros Lista_0.txt y Lista_1.txt puedo simular la búsqueda y ver si falla y donde el primer FOR.

Cuando este funcione hablamos del segundo FOR.

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
sin imagen de perfil
Val: 19
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Crear archivo .BAT

Publicado por Jose (10 intervenciones) el 21/06/2018 23:30:38
Gracias por la respuesta. Los archivos que busco son Gastos.xls, Pedidos.xls y Cliente.xls, y estan dentro carpetas Bdatos001, Bdatos002, bdatos3215,... Etc..
Que estan dentro de la carpeta datos.
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

Crear archivo .BAT

Publicado por Antoni Masana (811 intervenciones) el 22/06/2018 07:52:25
No nos entendemos.

Me tienes que adjuntar los dos ficheros que te pido para poder ver cual es el problema.
El fichero Lista_1.txt es lo que me cuentas pero necesito ver como esta el fichero.

Porque no es lo mismo que el fichero tenga esto asi:
1
Gastos.xls, Pedidos.xls, Cliente.xls

Que lo tenga asi:
1
2
3
Gastos.xls
Pedidos.xls
Cliente.xls

Y con el fichero Lista_0.txt solo genera una lista de ficheros y su ruta y no viola ningún secreto de confidencialidad.

Ejemplo de contenido:
1
2
3
4
5
6
7
8
9
C:\Datos\Bdatos001\Gastos.xls
C:\Datos\Bdatos001\Pedidos.xls
C:\Datos\Bdatos001\Cliente.xls
C:\Datos\Bdatos002\Gastos.xls
C:\Datos\Bdatos002\Pedidos.xls
C:\Datos\Bdatos002\Cliente.xls
C:\Datos\Bdatos003\Gastos.xls
C:\Datos\Bdatos003\Pedidos.xls
C:\Datos\Bdatos003\Cliente.xls

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
sin imagen de perfil
Val: 19
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Crear archivo .BAT

Publicado por Jose (10 intervenciones) el 22/06/2018 08:51:53
Gracias por la respuesta, y disculpa por no explicarlo bien, le adjunto el archivo List_1 esta asi: (separado por intro)
Gastos.xls
Pedidos.xls
Cliente.xls
Y el archivo List_0 esta igual que lo ha puesto usted.
Un saludo
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
Val: 19
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Crear archivo .BAT

Publicado por Jose (10 intervenciones) el 22/06/2018 09:12:06
Le adjunto el archivo List_1 con los nombres de los archivos y List_2 con las rutas
Gracias y un saludo
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

Crear archivo .BAT

Publicado por Antoni Masana (811 intervenciones) el 25/06/2018 08:00:04
He tenido que hacer algunos cambios pero ya funciona.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Echo off
SET Lis_1=C:\Tmp\Lista_1.txt
SET Lis_2=C:\Tmp\Lista_2.txt
TYPE nul >%Lis_2%
CD C:\Datos
FOR /F "delims=+" %%a in (%Lis_1%) do dir  "%%a" /S /B >>%Lis_2%
FOR /F "delims=+" %%a in (%Lis_2%) do call :Copiar %%a
cd \Tmp
del %Lis_1%
del %Lis_2%
DIR C:\Desktop\Prueba /S /P
goto:EOF
 
:Copiar
    SET Orig=%1
    SET Dest=%Orig:~9,99%
    echo     xcopy "%Orig%" C:\Desktop\Prueba\%Dest% /E /Y
    echo F | xcopy "%Orig%" C:\Desktop\Prueba\%Dest% /E /Y >nul
    goto :EOF

Las líneas 11 y 17 las puedes quitar

Esto debería funcionar pero si el fichero a buscar no esta en el primer directorio ya no busca en el resto de subdirectorios.
Y otra marranada del sistema, si el destino es un directorio y no existe, es igual si le pongo una barra y un punto al final, pregunta si es un fichero o un directorio.

1
2
3
@Echo off
SET Lis_1=C:\Tmp\Lista_1.txt
FOR /F "delims=+" %%a in (%Lis_1%) do Xcopy C:\Datos\%%a C:\DeskTop\Prueba\. /E /Y


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 Juan C.
Val: 4
Ha aumentado 1 puesto en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Crear archivo .BAT

Publicado por Juan C. (2 intervenciones) el 25/06/2018 15:26:31
Hola Jose, ¿conseguiste que funcione?
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

Crear archivo .BAT

Publicado por Antoni Masana (811 intervenciones) el 25/06/2018 19:23:54
Este me funciono perfectamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Echo off
SET Lis_1=C:\Tmp\Lista_1.txt
SET Lis_2=C:\Tmp\Lista_2.txt
TYPE nul >%Lis_2%
CD C:\Datos
FOR /F "delims=+" %%a in (%Lis_1%) do dir  "%%a" /S /B >>%Lis_2%
FOR /F "delims=+" %%a in (%Lis_2%) do call :Copiar %%a
cd \Tmp
del %Lis_1%
del %Lis_2%
goto:EOF
 
:Copiar
    SET Orig=%1
    SET Dest=%Orig:~9,99%
    echo F | xcopy "%Orig%" C:\Desktop\Prueba\%Dest% /E /Y >nul
    goto :EOF


He ampliado las líneas del segundo FOR porque en el destino no creaba las rutas, el destino siempre era C:\DeskTop\Prueba\ y no C:\DeskTop\Prueba\Bdatos001\ o C:\DeskTop\Prueba\Bdatos002\ con lo que el segundo fichero se sobre escribe encima del primero.

El segundo ejemplo que son 3 líneas de código tiene un fallo de diseño, si en el directorio raíz de donde ha de leer no existe el fichero ya no lo busca por el resto de directorios y debería hacerlo porque para eso tiene el parámetro /S pero pasa de ello.

Con el fichero que me pasaste cree la estructura de directorios y ficheros y realice la prueba y esta ultima versión lee y escribe lo que debe y donde debe.

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