Ms-Dos - Copiar i renombrar automaticamente.

 
Vista:
sin imagen de perfil

Copiar i renombrar automaticamente.

Publicado por Xisco (6 intervenciones) el 21/11/2017 02:14:00
Es un poco largo pero alla vamos:

Lo que necesito es lo siguiente:
Que el bat busque un archivo en qualquier unidad i en cualquier carpeta del sistema ( conseguido )
Que los copie directamente a una usb conectada sea qual sea su letra ( conseguido )
Que por ejemplo si hay 5 carpetas de finanzas del 2016 - 2018 i en cada uno de ellos hay un contabilidad.xls por ejemplo se me copien los 3 i no los sobrescriba automaticamente, pense en renombrar-los desde otro bat pero si los archivos estan muy juntos no le da tiempo a renombrar i el copiado se salta archivos. AYUDAAAA!!!!!.

Gracias.
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
SET VARIABLEDEARCHIVO=hola.txt
IF EXIST A:\TXT GOTO A
IF EXIST B:\TXT GOTO B
IF EXIST C:\TXT GOTO C
IF EXIST D:\TXT GOTO D
IF EXIST E:\TXT GOTO E
IF EXIST F:\TXT GOTO F
IF EXIST G:\TXT GOTO G
IF EXIST H:\TXT GOTO H
IF EXIST I:\TXT GOTO I
IF EXIST J:\TXT GOTO J
IF EXIST K:\TXT GOTO K
IF EXIST M:\TXT GOTO M
IF EXIST N:\TXT GOTO N
IF EXIST L:\TXT GOTO L
IF EXIST O:\TXT GOTO O
IF EXIST P:\TXT GOTO P
IF EXIST Q:\TXT GOTO Q
IF EXIST R:\TXT GOTO R
IF EXIST S:\TXT GOTO S
IF EXIST T:\TXT GOTO T
IF EXIST U:\TXT GOTO U
IF EXIST V:\TXT GOTO V
IF EXIST W:\TXT GOTO W
IF EXIST X:\TXT GOTO X
IF EXIST Y:\TXT GOTO Y
IF EXIST Z:\TXT GOTO Z
 
:a
for /R "a:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "b:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "c:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "d:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "e:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "f:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "g:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "h:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "i:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "j:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "k:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "l:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "m:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "n:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "o:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "p:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "q:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "r:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "s:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "t:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "u:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "v:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "w:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "x:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "y:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
for /R "z:\" %%G in (%VARIABLEDEARCHIVO%) do copy "%%G" "a:\txt"
goto FIN
:b

La pagina no me deja poner el codigo completo pero supongo que con este trozo se entiende la idea.

Skype: joitronix

Muchas 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
Imágen de perfil de Antoni Masana
Val: 1.389
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Copiar i renombrar automaticamente.

Publicado por Antoni Masana (649 intervenciones) el 21/11/2017 07:10:29
Hola Xisco,

Creo entender parte de tu idea/problema pero como casi todo en informática hay al menos dos formas de hacerlo y una de ellas es para subir el fichero: lo comprimes y lo subes como adjunto.

Segunda cuestión: vamos a simplificar las cosas:

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
28
29
30
31
32
33
@echo off
 
SET DISCOS=A B C D E F G H I J K L M N O P Q R S T U V V X Y Z
 
SET Nom=hola
SET Ext=txt
SET VARIABLEDEARCHIVO=%Nom%%Ext%
 
FOR %%a in (%Discos%) DO IF EXIST %%a:\TXT SET Destino=%%a
 
IF not "%Destino%" == "" FOR %%a in (%Discos%) DO call :Buscar %%a
GOTO:EOF
 
:Buscar
   Set Origen=%1
   if %Origen% == %Destino% GOTO EOF
   FOR /R "%Origen:\" %%b in (%VARIABLEDEARCHIVO%) do call :Copiar %%b
   GOTO:EOF
 
:Copiar
   SET Fichero=%1
   SET Nombre=%Nom%
   SET Cont=0
 
:Repite
   IF Not exist "%Destino%\Txt\%Nombre%.%Ext%" Goto Eject
      SET /A Cont+=1
      SET Nombre=%Nom%_%Cont%
      goto Repite
 
:Eject
   copy "%Fichero%" "%Destino%:\txt\%Nombre%.%Ext%"
   goto:EOF

Aquí hay 33 líneas de código que hacen exactamente lo mismo que las aproximadamente 800 de tu código a falta de probar.

He añadido un par de verificaciones:
- En la línea 11 verifica que encontró el destino
- En la línea 16 Origen y destino han de ser diferentes.

En el momento de copiar verifica que no exista el destino, en este caso "hola.txt", si ya existe verifica si existe "hola_1.txt" y si existe "hola_2.txt" hasta encontrar uno que no exista y lo copia con ese nombre.

Cuentame que tal te ha funcionado. Y si realmente hace lo mismo. para probar sin copiar pon un ECHO antes del copy en la línea 32

NOTA: Las unidades A y B son las antiguas disqueteras de 5 1/4 o 3 1/2, quitalas de la lista si no las utilizas, ahorraras tiempo.

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.389
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Copiar i renombrar automaticamente.

Publicado por Antoni Masana (649 intervenciones) el 21/11/2017 10:29:18
Lo he probado y corregido algunos fallos y he añadido alguna verificación

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
@echo off
 
set DISCOS=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
set Destino=@
 
set Nom=hola
set Ext=txt
set VARIABLEDEARCHIVO=%Nom%.%Ext%
 
for %%a in (%Discos%) do if exist %%a:\TXT\nul call :Destino %%a
 
echo.
echo.Destino... %Destino%:\TXT
echo.
 
if not "%Destino%" == "@" goto Fallo
   for %%a in (%Discos%) do call :Buscar %%a
   goto:EOF
 
:Destino
   if "%Destino%" == "@" set Destino=%1
   goto:EOF
 
:Fallo
   echo.
   echo.ERROR: no se ha encontado ningun disco con el directoro \TXT
   echo.
   goto:EOF
 
:Buscar
   set Origen=%1
 
   if    not exist %Origen%:\ goto:EOF
   if %Destino% == %Origen%   goto:EOF
 
   echo.Origen.... %1:\
 
   for /R "%Origen%:\" %%b in (%VARIABLEDEARCHIVO%) do call :Copiar "%%b"
   goto:EOF
 
:Copiar
   set Fichero=%1
   set Nombre="%Destino%:\Txt\%Nom%.%Ext%"
   set Cont=0
 
   if not exist %Fichero% goto:EOF
 
:Repite
   in not exist %Nombre% goto Eject
      set /A Cont+=1
      set Nombre="%Destino%:\Txt\%Nom%_%Cont%.%Ext%"
      goto Repite
 
:Eject
   echo.   Copia.. %Fichero:~1,-1%
   copy %Fichero%  %Nombre% >nul
   goto:EOF

A mi me ha funcionado.

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

Copiar i renombrar automaticamente.

Publicado por Francisco (6 intervenciones) el 21/11/2017 18:16:50
Muchas gracias por contestar, pero a la hora de abrir-lo no se me ejecuta. : C
Lo he estado revisando i no entiendo varias cosas con lo que no se que puede ser.

Es decir se me abre i cierra automaticamente. sin hacer nada.
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

Copiar i renombrar automaticamente.

Publicado por Francisco (6 intervenciones) el 21/11/2017 18:42:49
Vale el primero que has pasado si funciona pero no copia nada, sale una lita que se esta copiando archivos pero no se donde i luego se cierra. pero en la unica carpeta g:\txt no veo nada.
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.389
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Copiar i renombrar automaticamente.

Publicado por Antoni Masana (649 intervenciones) el 21/11/2017 22:13:09
El primero que te he enviado no funciona bien.

El que he enviado a las 10:29:18 si que funciona, palabrita que funciona. Lo he probado. (Y ahora he descubierto una pifia. ver línea 49)

Cópialo en un editor de textos, preferiblemente NotePad o BlocDeNotas y grabalo con extensión .BAT o .CMD. Te adjunto una versión revisada y mejor. Ver código mas abajo

Despues de unos segundos te tiene que salir algo asi:

1
Destino... G:\TXT

Donde G sera la letra del primer disco que tenga en el raiz un directorio TXT. Si sale esto es que no lo ha encontrado y finaliza con un texto de aviso:

1
2
3
4
Destino... @:\TXT
 
 
ERROR: no se ha encontado ningun disco con el directoro \TXT

Si lo encuentra lo siguiente que sale es el disco que esta analizando que el primero tiene que ser el C

1
2
3
Destino... G:\TXT
 
Origen.... C:\

Y si encuenta un fichero lo miestra asi

1
2
3
4
Destino... G:\TXT
 
Origen.... C:\
   Copia.. C:\Ficheros\Hola.txt

Y basandome en tu ejemplo busca todos lo ficheros hola.txt de todos lo discos menos en disco destino, cosa que si haces en tu código, si el destino es el disco A, la linea 30 sobra.

Si quieres copiar un fichero con un nombre determinado, por ejemplo libro1.xls funciona perfectamente.
Si lo quieres usar para buscar con comodines, por ejemplo, Gastos*.xlsx hay que hacer un pequeño cambio.

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
@echo off
 
set DISCOS=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
set Destino=@
 
set Nom=hola
set Ext=txt
set VARIABLEDEARCHIVO=%Nom%.%Ext%
 
for %%a in (%Discos%) do if exist %%a:\TXT\nul call :Destino %%a
 
echo.
echo.Destino... %Destino%:\TXT
echo.
 
if not "%Destino%" == "@" goto Fallo
   for %%a in (%Discos%) do call :Buscar %%a
   goto:EOF
 
:Destino
   if "%Destino%" == "@" set Destino=%1
   goto:EOF
 
:Fallo
   echo.
   echo.ERROR: no se ha encontado ningun disco con el directoro \TXT
   echo.
   goto:EOF
 
:Buscar
   set Origen=%1
 
   if    not exist %Origen%:\ goto:EOF
   if %Destino% == %Origen%   goto:EOF
 
   echo.Origen.... %1:\
 
   for /R "%Origen%:\" %%b in (%VARIABLEDEARCHIVO%) do call :Copiar "%%b" %~nb
   goto:EOF
 
:Copiar
   set Nombre_Orig=%1
   set Nombre_File=%2
   set Nombre_Dest="%Destino%:\Txt\%Nombre_File%.%Ext%"
   set Cont=0
 
   if not exist %Nombre_Orig% goto:EOF
 
:Repite
   if not exist %Nombre_Dest% goto Eject
      set /A Cont+=1
      set Nombre_Dest="%Destino%:\Txt\%Nombre_File%_%Cont%.%Ext%"
      goto Repite
 
:Eject
   echo.   Copia.. %Nombre_Orig:~1,-1%
   copy %Nombre_Orig%  %Nombre_Dest% >nul
   goto:EOF

He modificado las líneas 38 en adelante y en la linea 50 tenia un error: en lugar de IF ponia IN

Prueba esta versión. En las líneas 6 y 7 tienes que poner lo que quieres copiar. Siguiendo el ejemplo de antes:

1
2
3
set Nom=Gastos*
set Ext=xlsx
set VARIABLEDEARCHIVO=%Nom%.%Ext%

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

Copiar i renombrar automaticamente.

Publicado por francisco (6 intervenciones) el 21/11/2017 22:33:09
Vale lo tenia que llamar si lo abro directamente da error si lo abro desde otra consola funciona.

Pero no me encuentra el directorio lo tengo en una usb i dice lo siguiente:

Destino... G:\TXT


ERROR: no se ha encontado ningun disco con el directoro \TXT


C:\Users\PC - 04.DESKTOP-GMLQP53\Desktop>como sabe que es g pero no hay disco wtf? xD
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

Copiar i renombrar automaticamente.

Publicado por FRANCISCO (6 intervenciones) el 21/11/2017 23:07:04
VALE YA FUNCIONA.

ERA UN PROBLEMA EN ESTAS LINEAS:

for /R "%Origen%:\" %%b in (%VARIABLEDEARCHIVO%) do call :Copiar "%%b" [%~nb]= HE BORRADO ESTA PARTE QUE DABA ERROR


I BORADO ESTA LINEA: if not "%Destino%" == "@" goto Fallo
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.389
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Copiar i renombrar automaticamente.

Publicado por Antoni Masana (649 intervenciones) el 22/11/2017 06:21:22
Hay un par de errores. la línea 16 esta mal:

No te encontraba la unidad G porque la condición de fall estaba mal puesta. Decia si Destino tiene algo diferente de ARROBA es que fallo

1
if not "%Destino%" == "@" goto Fallo

lo correcto es si Destino es igual a ARROBA es que fallo

1
if "%Destino%" == "@" goto Fallo

Y la línea 38 también

1
for /R "%Origen%:\" %%b in (%VARIABLEDEARCHIVO%) do call :Copiar "%%b" %~nb

Lo correcto. Faltaba un % en el último parámetro

1
for /R "%Origen%:\" %%b in (%VARIABLEDEARCHIVO%) do call :Copiar "%%b" %%~nb

Ya debería funcionar mejor

Saluds.
\\//_
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