Problema con condición If y goto MSDOS.

Espero me puedan ayudar de nuevo. Tengo este código en MSDOS:

@echo off
title Condiciones If y goto.
cls

set /p ubi= Da ubicación para localizar carpeta:

if exist %ubi%:\Prueba goto men1 else goto men2

:Men1
@echo La carpeta ya existe.

Pause

:Men2
@echo La carpeta no existe.
Pause

Nota: mi carpeta se llama "Prueba".

El problema es que entra a las 2 condiciones, cuando sólo quiero que entre en una sola y se salga, que la otra no la tome en cuenta, cuando la afirmación sea verdadera y viceversa, ¿cómo le puedo hacer?.

Además, aún cuando no existe la carpeta, me dice que sí existe.

1 Respuesta

Respuesta
1

Observo dos problemas:

1. El uso del ELSE en un IF puede tener trampas (prueba a teclear IF /? en una ventana MSDOS y te lo aclarará más) porque a veces el comando de la primera parte necesita un fin de línea como es el caso del comando GOTO. En esos casos hay que ponerlo entre paréntesis. El tuyo debería ser:

if exist %ubi%:\Prueba (goto men1) else goto men2

2. No has tenido en cuenta la "ejecución secuencial". Si se cumple la condición del IF el GOTO MEN1 te enviará a la etiqueta :MEN1 pero después de sacar el mensaje indicado en el ECHO, entraría, secuencialmente, en el PAUSE y después en la etiqueta :MEN2 con su correspondiente ECHO y PAUSE. Si quieres evitar esta "ejecución secuencial" tendrás que poner otro GOTO después del primer PAUSE, algo como GOTO FIN, y crear una etiqueta :FIN como último comando del BAT.

Me ha funcionado como lo dijiste, tan sólo por no poner paréntesis. Lo comparto:

@echo off
title Condiciones If y goto.
cls

set /p ubi= Da ubicación para localizar carpeta:


if exist %ubi%:\prueba (goto men1) else goto men2

:men1
@echo La carpeta ya existe.

goto fin


:men2
@echo La carpeta no existe.
goto fin


:fin
@echo Esta por salir del programa.
pause

Y yo te AGRADEZCO MUCHÍSIMO, EXPERTO... muchos saludos.

Ahora bien, se me ha presentado otro problema, ¿cómo le puedo hacer, para poder poner instrucciones largas, en una misma condición, en la misma línea?, ¿existe algún tipo de separador, para qué, cuando se acabe una instrucción siga con la otra?.

Supongo que lo que quieres es poder ejecutar más de una instrucción en cada rama de un IF (o de un FOR).

Para ello basta incluir todas las instrucciones entre un paréntesis de apertura y otro de cierre y pueden utilizarse varias líneas. Por ejemplo

if exist %ubi%:\prueba (

echo Existe la carpeta

copy %ubi%:\prueba\kk.txt %ubi%:\prueba\ggg.txt

goto men1

)

Si se cumple la condición del IF (si existe la carpeta "prueba" en la unidad %ubi%:) ejecutará el primer ECHO, copiará el archivo kk.txt en ggg.txt y luego saltará a la etiqueta :MEN1 para seguir ejecutando lo que se indique allí.

Creo que esto es lo que te interesaba saber.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas