Ms-Dos - Copiar archivo, y si existe, renombrarlo

   
Vista:

Copiar archivo, y si existe, renombrarlo

Publicado por Salvador1 (18 intervenciones) el 31/01/2018 23:14:17
Hola:

Lo que hace el código es copiar un archivo (arrastrado al icono .bat) a una carpeta (llamada "Nueva"), si no existe el archivo en dicha carpeta lo copia, y si no, te pide un nuevo nombre y hace la copia.

La dificultad la tengo justo después de la línea 46, es decir: hay que comprobar que el archivo renombrado no exista, pero no sé como hacer para que te pida un nuevo nombre. He probado con un goto a la variable NOMBRE (línea 43), pero en cuanto llega de primeras, da error.

Agradecería cualquier ayuda.

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
cls
set UNO=%1
Set DOS=C:\Users\usuario\Desktop\Nueva\
Set TRES=%~n1%~x1
Set CUATRO=%~P1 (RUTA CORTA SIN NOMBRE)
Set EXTENSION=%~x1
 
 
If exist "%DOS%%TRES%" (
Cls
COLOR C
   echo Duplicado
   pause
GOTO AQUI
 
) ELSE (
 
cls
copy "%UNO%" "%DOS%"
   pause
Cls
COLOR A
Echo Copiado con exito
Pause
Exit
)
 
:AQUI
ECHO ****************************
ECHO * 1.- Renombrar
ECHO * 2.- Salir
ECHO ****************************
CHOICE /C 12
 
IF ERRORLEVEL 2 GOTO SALIR
IF ERRORLEVEL 1 GOTO RENOMBRAR
 
:RENOMBRAR
cls
COLOR A
Echo RENOMBRAR:
 
Set/P NOMBRE=Nuevo nombre:
 
	iF EXIST "%DOS%%NOMBRE%%EXTENSION%" (
	Echo "Ya existe. Prueba otro nombre")
 
	ELSE (
	ren "%DOS%%TRES%" "%NOMBRE%%EXTENSION%"
	pause
	exit )
 
:SALIR
cls
COLOR B
Echo Saliendo.......
pause
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

Copiar archivo, y si existe, renombrarlo

Publicado por Antoni Masana (479 intervenciones) el 01/02/2018 07:26:38
Arreglado:

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
@echo off
cls
set File_a_copia=%1
Set Direc_Destino=C:\Users\usuario\Desktop\Nueva\
 
Set Origen_Nomb=%~n1
Set Origen_Exte=%~x1
 
:Inicio
   If exist "%Direc_Destino%%Origen_Nomb%%Origen_Exte%" (
      cls
      color C
      echo Duplicado
      pause
      goto AQUI
   ) else (
      cls
      copy "%File_a_copia%" "%Direc_Destino%%Origen_Nomb%%Origen_Exte%"
      pause
      cls
      color A
      echo Copiado con exito
      pause
      color 7
      goto :EOF
   )
 
:AQUI
   ECHO ****************************
   ECHO * 1.- Renombrar
   ECHO * 2.- Salir
   ECHO ****************************
   ECHO.
   CHOICE /C 12
 
   IF ERRORLEVEL 2 GOTO SALIR
   IF ERRORLEVEL 1 GOTO RENOMBRAR
 
:RENOMBRAR
   cls
   color A
   Echo RENOMBRAR:
 
   Set /P Origen_Nomb=Nuevo nombre sin extension:
   goto Inicio
 
:SALIR
   cls
   color B
   Echo Saliendo.......
   color 7
   pause

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

Copiar archivo, y si existe, renombrarlo

Publicado por Salvador1 (18 intervenciones) el 01/02/2018 14:53:10
Lo revisaré más despacio porque nada más arrastrar el archivo al bat, sale: "el sistema no puede encontrar el archivo especificado".

Aun así gracias por tu buen trabajo (está mucho más claro que el mío).
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

Copiar archivo, y si existe, renombrarlo

Publicado por Salvador (18 intervenciones) el 04/02/2018 15:16:15
Hola de nuevo:

Observo que el error que sale de "el sistema no puede encontrar el archivo especificado" se debe a cuando el archivo tiene espacios.

¿Hay alguna solución?
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

Copiar archivo, y si existe, renombrarlo

Publicado por Salvador (18 intervenciones) el 04/02/2018 15:25:15
Ya he dado con la solución: poner entre comillas el %1 y la ruta de la carpeta.
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

Copiar archivo, y si existe, renombrarlo

Publicado por Antoni Masana (479 intervenciones) el 04/02/2018 16:20:57
En la línea 10 que verifica si existe el destino y la 18 que copia ya tenia las comillas. ¿Donde se las has puesto? Me tiene intrigado.

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

Copiar archivo, y si existe, renombrarlo

Publicado por Salvador (18 intervenciones) el 04/02/2018 18:46:11
Se las he puesto en las líneas 3 y 4.

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

Copiar archivo, y si existe, renombrarlo

Publicado por Antoni Masana (479 intervenciones) el 05/02/2018 07:06:55
Yo he probado esto y funciona tal cual en Windows 7. He creado un acceso directo al BAT y muevo un archivo con espacios y funciona, es más en el primer SET me pone las comillas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
cls
set File_a_copia=%1
Set Direc_Destino=C:\Users\usuario\Desktop\Nueva\
 
Set Origen_Nomb=%~n1
Set Origen_Exte=%~x1
 
Echo.File Copia.: ( %File_a_Copia% )
echo.
echo.Nombre.....: ( %Origen_Nomb% )
echo.
echo.Extension..: ( %Origen_Exte% )
echo.
pause

El resultado:

1
2
3
4
5
6
7
File a Copia.: ( "C:\Win_Save_Cron\Win Save Cron.exe" )
 
Nombre.......: ( Win Save Cron )
 
Extension....: ( .exe )
 
Presione una tecla para continuar . . .

Lo comento como una curiosidad de Windows, que dicho sea de paso tiene muchas.

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
Revisar política de publicidad