Ms-Dos - variable dentro de otra variable

 
Vista:
sin imagen de perfil

variable dentro de otra variable

Publicado por ABRIGO (4 intervenciones) el 14/11/2015 00:13:27
hola a tod@s

Estoy haciendo un bat, en ms-dos, para realizar una copia de seguridad con robocopy. Y con ello estoy aprendiendo. Mi duda es la siguiente:
En el disco T, tengo las siguientes carpetas

00 NOVEDADES
02 PELICULAS
33 JUEGOS INFANTILES


ahora quiero copiar carpeta por carpeta con un bucle al disco W.

Esto es, cuando n=1 , entonces me copias la carpeta 1 a disco W
cuando n=2 me copias la carpeta 2 al disco W así, hasta 33.

Como novato, he realizado el programa a lo bruto y sale, es decir un bat con 33 robocopy y listo. (También se que hay muchos programas que lo hacen). Pero ahora quiero aprender mas cosas y lo quería hacer con un solo robocopy


Lo que llevo hecho es lo siguiente


@ECHO OFF


: COPIA DISCO D:\ a DISCO W:\


SET CARPETA0=00 NOVEDADES
SET CARPETA1=01 CENTRAL
SET CARPETA2=02 PELICULAS
SET CARPETA33=33 JUEGOS INFANTILES

SET N=-1

:BUCLE

SET /A N=%N%+1


ECHO CARPETA%N%
pause

EL PROBLEMA VIENE AQUI. CUANDO N=0 EL ECHO CARPETA%N%, ME DE UN RESULTADO DE CARPETA0
PERO SI HAGO ESTO:

ECHO %CARPETA%N%%

NO ME DA EL VALOR QUE TIENE LA CARPETA%n% , O SEA "00 NOVEDADES", haciendo cambios me da N% o carpeta 0, pero nunca carpeta 00 novedades.

Y POR TANTO ROBOCOPY NO SABE QUE QUIERO COPIAR LA CARPETA "00 NOVEDADES"
.
:ROBOCOPY
echo %CARPETA0%
echo %CARPETA%N%%
PAUSE

ROBOCOPY "D:\%CARPETA%N%%" "W:\%CARPETA%N%%"

Debería hacer "D:\00 novedades" " W:\00 novedades"


echo error %errorlevel%

pause
if errorlevel 16 echo error %errorlevel% ***ERROR FATAL*** & goto :eofi
if errorlevel 8 echo error %errorlevel% **COPIAS FALLIDAS** & goto :eofi
if errorlevel 4 echo error %errorlevel% *DISCREPANCIAS* & goto :eofi
if errorlevel 2 echo error %errorlevel% FICHEROS EXTRA & goto :eofi
if errorlevel 1 echo error %errorlevel% Copia correcta & goto :eofi
if errorlevel 0 echo error %errorlevel% sin cambios & color 71 & goto eofi

:eofi

PAUSE
GOTO BUCLE


GRACIAS DE ANTE MANO Y PERDONEN LA INEXPERIENCIA.
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 A.H.H.

variable dentro de otra variable

Publicado por A.H.H. (216 intervenciones) el 14/11/2015 19:44:23
Hola lo que pasa en tu codigo es que para que puedas mostrar una variable dentro de otra como dices tu tienes que habilitar el retraso de expansion de variables osea arriba despues de la linea @echo off debes poner setlocal ENABLEDELAYEDEXPANSION.

y despues para que el bat te muestre bien el contenido de la variable debes encerrar entre signos de !
me explico: esta linea te mostraria el contenido correcto ECHO !CARPETA%N%!

despues debes cerrar con ENDLOCAL el codigo para que sigas trabajando con las variables normales.
EJEMPLO:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@ECHO OFF
setlocal ENABLEDELAYEDEXPANSION
SET CARPETA0=00 NOVEDADES
SET CARPETA1=01 CENTRAL
SET CARPETA2=02 PELICULAS
SET CARPETA33=33 JUEGOS INFANTILES
 
SET N=-1
 
:BUCLE
SET /A N=%N%+1
 
 
ECHO !CARPETA%N%!
 
endlocal
 
pause

PRUEBA ESTE POCO DE CODIGO VERAS QUE TE MUESTRA................ 00 NOVEDADES

Tambien si declaras arriba setlocal ENABLEEXTENSIONS
los errorlevel trabajaran mejor ......


un saludo espero te sirva....
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

variable dentro de otra variable

Publicado por ABRIGO (4 intervenciones) el 16/11/2015 16:14:52
Muchas gracias, voy a probarlo, y a investigar eso a ver que me sale muchas gracias nuevamente.
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

variable dentro de otra variable

Publicado por ABRIGO (4 intervenciones) el 17/11/2015 10:19:21
gracias he probado lo que me mandaste y funciona. muy agradecido.

Estoy investigando además esos comandos que comentaste a ver que aprendo de mas.

No entendí mucho lo de enableextensions
para lo códigos de error pero intentaré buscarlo. Entiendo que con la palabra endlocal se cierra todo.

dos preguntas más, si se me permite.

1.- existe algo para poner las variables a cero cuando se termina un bucle
o hay que hacer esto antes de empezar el bucle:

set var1=
ser var2=
set var3=


2.- hay algo que cuando responda a una pregunta, da lo mismo que meta una S mayúscula que minúscula.
Ejemplo
@ECHO OFF
:TITULO SELECIONA UNA COPIA DE SEGURIDAD

:INICIO
CLS

ECHO ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ECHO +++++++++++++++++++++++++++++++++MENU ++++++++++++++++++++++++++++
ECHO ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ECHO.
ECHO PROGRAMA DE COPIA DE SEGURIDAD SEGUN ROBOCOPY
ECHO.
ECHO.
ECHO.
ECHO A) APAGAR EL ORDENADOR AL TERMINAR COPIA
ECHO.
ECHO N) NO APAGAR EL ORDENADOR
ECHO.
ECHO ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ECHO.
ECHO S) SALIR
ECHO.
ECHO +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ECHO.

Set /p var=SELECIONAR OPCION:

if "%var%"=="A" goto VARIABLE1
if "%var%"=="a" goto VARIABLE1
if "%var%"=="N" gOTO VARIABLE2
if "%var%"=="n" gOTO VARIABLE2
if "%var%"=="S" GOTO SALIDA
if "%var%"=="s" GOTO SALIDA

gracias nuevamente
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 A.H.H

variable dentro de otra variable

Publicado por A.H.H (216 intervenciones) el 19/11/2015 20:09:50
HOLA

Si pones el comando IF seguido del modificador /I osea IF /I
sirve para lo que preguntas sobre mayusculas o minisculas en la introduccion del caracter.

ejemplo:
1
if /I "%var%" == "A" goto :VARIABLE1

con IF /I solo pondrias la condicion de la "A" NO HACE FALTA que pongas la condicion de la "a"

Tambien puedes poner el siguiente codigo para verificar que el usuario introduce otro caracter que no sea los del menu osea imagina que teclean otra cosa que no sea la "A" LA "N" O LA "S" podria ser asi:
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
@ECHO OFF
:TITULO SELECIONA UNA COPIA DE SEGURIDAD
 
:INICIO
CLS
 
ECHO ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ECHO +++++++++++++++++++++++++++++++++MENU ++++++++++++++++++++++++++++
ECHO ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ECHO.
ECHO PROGRAMA DE COPIA DE SEGURIDAD SEGUN ROBOCOPY
ECHO.
ECHO.
ECHO.
ECHO A) APAGAR EL ORDENADOR AL TERMINAR COPIA
ECHO.
ECHO N) NO APAGAR EL ORDENADOR
ECHO.
ECHO ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ECHO.
ECHO S) SALIR
ECHO.
ECHO +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ECHO.
 
:SELECCION
Set /p var=SELECIONAR OPCION:
 
if /I "%var%" == "A" goto :VARIABLE1
 
if /I "%var%" == "N" gOTO :VARIABLE2
 
if /I "%var%" == "S" GOTO :SALIDA
 
IF /I "%var%" NEQ "A" (GOTO :ERROR)
 ELSE (
IF /I "%var%" NEQ "N" (GOTO :ERROR)
 ELSE (
IF /I "%var%" NEQ "S" (GOTO :ERROR)
 
 
:ERROR
 
ECHO ERROR DE INTRODUCCION DE CARACTER
ECHO VUELVA A INTENTARLO
pause
GOTO :SELECCION
***************************************************

En cuanto a la otra duda de vaciar las variables supongo que con SET variable="" valdria o si la variable es numerica con set variable=0 tambien


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
1
Comentar
sin imagen de perfil

variable dentro de otra variable

Publicado por ABRIGO (4 intervenciones) el 23/11/2015 17:16:53
hei muchas gracias por la información, eso me ahorra un par de líneas del programa, muchas 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

variable dentro de otra variable

Publicado por Alan (1 intervención) el 14/11/2017 17:45:29
Hola, quisiera su apoyo porfavor.

estoy intentando extraer caracteres en bat pero el numero de caracter a extraer lo tengo dentro de una variable y me da error. la sentencia es la siguiente:

set ip2=%dip:~7,%long%%

donde long es un numero (8) para extraer caracteres de una variable (dip).

podrian apoyarme porfavor.

muchas 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