Problema con variables en un programa .bat

Tengo un problema con un programa .bat. Le he puesto una función 'If' para que si se cumple realice un proceso, y en caso contrario (Else), salga un mensaje de error.

El problema es que no sé por qué no funciona, puesto que cuando lo programé me funcionaba sin ningún problema...

Este es el apartado con el que tengo problemas:

:Dfrana
Title ANALIZAR DISCO
Color 1F
Cls

set/p uni= Indique la(s) letra(s) de unidad que quiere analizar (Ej.: C: D:):
If Exist "%uni%" (
Echo -------------------------------------------------
Echo Se realizar un analisis completo de la unidad...
Echo -------------------------------------------------
Timeout /T 5
Cls
Echo ----------------------------
Echo Esto puede tardar un rato...
Echo ----------------------------
Defrag %uni% /A
Echo ----------------------------
Echo Primer analisis terminado...
Echo ----------------------------
Timeout /Nobreak /T 10
Chkdsk %uni% /A
Echo ------------------------------
Echo Anaisis completo realizado...
Echo ------------------------------
) Else (
Color CE
Echo ------------------------------------------------------------
Echo La(s) unidad/es "%uni%" no existe(n), intentelo de nuevo...
Echo ------------------------------------------------------------
Timeout /T 10
goto dfrana
)
Pause
goto dfr

He probado a quitarle el "If Exist" y el "Else" y así sí que funciona, pero no quiero quitarle estas funciones, puesto que me parecen muy útiles...

1 respuesta

Respuesta
1

Pues es algo tan tonto como que los paréntesis del

Echo La(s) unidad/es "%uni%" no existe(n), intentelo de nuevo...

cierran indebidamente  el Else.

Creo que si lo pones así:

Echo La^(s^) unidad/es "%uni%" no existe^(n^), intentelo de nuevo...

No tendrás problemas.

Aunque es una tontería me ha costado un poco averiguarlo

Jope, pues no había pensado en que pudiera ser eso... Como decía, en otro PC sí que me funcionaba. Muchísimas gracias de verdad!!

Ya que estamos me podrías explicar que es lo que hace el símbolo "^"?

Cuando en un lenguaje interpretado (como es el de los bat que utiliza los comandos de MSDOS) hay que utilizar un símbolo que tiene un significado especial para el lenguaje (como pueden ser los paréntesis (), la pipa |, las redirecciones <>, el % y algún otro para este "lenguaje") hay que indicarle al "intérprete" de alguna manera que no se quiere usar ese significado especial sino el símbolo sin más. Diferentes lenguajes interpretados utilizan distintas formas para "escapar" los caracteres especiales. Algunos simplemente los duplican, otros los preceden de otro carácter especial y otros utilizan distintas formas para los distintos caracteres. En nuestro caso el "^" se usa para "escapar" bastantes de ellos (los paréntesis, la pipa, los de > y <) aunque otros se duplican (como el propio ^ y el %). Y eso es lo que hace en este caso.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas