{batch} SI NO EXISTE <mi carpeta> no funciona

Resuelto
Tinouboom Mensajes publicados 12 Estado Miembro -  
barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   -
Hola a todos

Así que, quiero pedir al usuario que indique la ruta del directorio de instalación de OpenVPN (con una ruta predeterminada - ver código). Sin embargo, cuando añadí los "if" para capturar posibles errores, ya no funciona, el programa se redirige constantemente a :error_ruta1 y la consola se cierra en el segundo intento (pensé que esto se debía a las comillas por los espacios, pero lo he probado todo, y no hay manera :) )

Gracias por su ayuda.

@echo off

REM El usuario indica la ruta del directorio de instalación de OpenVPN
:ruta
set /p ruta=Indique entre comillas la ruta completa del directorio de OpenVPN [por defecto (presione Enter) "C:\Program Files (*86)\OpenVPN"]:
echo.
if "%ruta%"=="" (
set ruta="C:\Program Files (*86)\OpenVPN"
)
IF NOT EXIST %ruta%\nul (
GOTO :error_ruta1
)
IF NOT EXIST %ruta%\easy-rsa\nul (
GOTO :error_ruta2
)
cd %ruta%
GOTO :elección

:error_ruta1
cls
echo ### La ruta %ruta% no es válida. Verifique los espacios y las comillas ###
echo.
set "%ruta%"==""
GOTO :ruta

:error_ruta2
cls
echo ### La ruta %ruta% no es la correcta ###
echo.
set "%ruta%"==""
GOTO :ruta

:elección
echo Si desea crear o configurar su servidor OpenVPN (SOLO UNA VEZ), escriba 1 y presione Enter

3 respuestas

barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930
 
Hola,

Cuando utilizas set para definir una variable, solo debes poner un signo = y no debes poner los %%
set camino=""

Yo, en tu lugar, ni siquiera pondría los ""
set camino=


Con respecto al "if exist" no debes poner nul, solo pones la carpeta.

“La inteligencia artificial se define como lo contrario de la estupidez natural.”
0
Tinouboom Mensajes publicados 12 Estado Miembro
 
Hola,

Gracias por tu respuesta tan rápida. Efectivamente, un pequeño error de atención. Sin embargo, la gestión de errores todavía no funciona.
Lo que se debería hacer es verificar si la carpeta <easy-rsa> se encuentra realmente en la carpeta indicada por el usuario (pienso que :error_ruta1 es innecesario al final ya que está incluido en :error_ruta2), pero incluso el valor predeterminado no funciona y redirige a :error_ruta2.
¿Alguna idea?

REM El usuario indica la ruta de la carpeta de instalación de OpenVPN
:ruta
set /p ruta=Indique entre comillas la ruta completa de la carpeta de OpenVPN [por defecto (presione Enter) "C:\Program Files (*86)\OpenVPN"]:
echo.
if "%ruta%"=="" (
set ruta="C:\Program Files (*86)\OpenVPN"
)
REM IF NOT EXIST %ruta% ( ###innecesario###
REM GOTO :error_ruta1
REM )

IF NOT EXIST %ruta%\easy-rsa (
GOTO :error_ruta2
)

cd %ruta%
GOTO :elección

REM :error_ruta1
REM cls
REM echo ### La ruta %ruta% no es válida. Verifique los espacios y las comillas ###
REM echo.
REM set ruta=
REM GOTO :ruta

:error_ruta2
cls
echo ### La ruta %ruta% no es la correcta ###
echo.
set ruta=
GOTO :ruta
0
barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930 > Tinouboom Mensajes publicados 12 Estado Miembro
 
Cuando publicas código, debes usar las etiquetas de resaltado de sintaxis.

En cuanto a tu problema, prueba así:
set chemin="%ProgramFiles%\OpenVPN" 
0
Tinouboom Mensajes publicados 12 Estado Miembro > barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención  
 
¿Cómo se hace? Lo siento, es la primera vez en el foro.
0
Tinouboom Mensajes publicados 12 Estado Miembro
 
No funciona...

¡Gracias por ayudarme de todos modos!
0
barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930 > Tinouboom Mensajes publicados 12 Estado Miembro
 
Cuando redactas un mensaje, hay las etiquetas en la esquina derecha, es esa con los símbolos <>
0
barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930
 
En tu lugar, en vez de dejar que el usuario ingrese la ruta de OpenVPN, yo la buscaría por mí mismo :

cd "%ProgramFiles(x86)%"
for /f "tokens=* " %%A in ('dir /b /ad /s "*.*" ^| findstr /i "easy-rsa"') do (set chemin=%%A)


“La inteligencia artificial se define como lo contrario de la estupidez natural.”
0
Tinouboom Mensajes publicados 12 Estado Miembro
 
¡Genial!

No entendí completamente el pedido, pero me informaré. Sin embargo, "ruta" llegó hasta la subcarpeta contenida en "easy-rsa".

Muchas gracias, lo marco como RESUELTO.
0
barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930
 
¿Funciona así?

:camino
rem definimos un camino por defecto
set camino=%ProgramFiles(x86)%\OpenVPN\easy-rsa

rem nos posicionamos en la carpeta
cd "%ProgramFiles(x86)%"

rem buscamos OpenVPN\easy-rsa
for /f "tokens=*" %%A in ('dir /b /ad /s "*.*" ^| findstr /i "easy-rsa"') do ((echo %%A | findstr "VPN") && (set camino=%%A))

echo %camino%
pause

:elección
echo Si desea crear o configurar su servidor OpenVPN (SOLO UNA VEZ), escriba 1 y presione Enter


“La inteligencia artificial se define como lo contrario de la estupidez natural.”
0
Tinouboom Mensajes publicados 12 Estado Miembro
 
Pero en realidad solo funciona si el usuario lo ha instalado en Program Files (x86), ¿verdad?
¿Hay alguna manera de buscar la carpeta en todo el disco duro?
0
barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930 > Tinouboom Mensajes publicados 12 Estado Miembro
 
Sí, es posible, pero va a llevar demasiado tiempo.

Si estuviera en tu lugar, primero verificaría si es un Windows de 32 bits o de 64 bits, luego, según eso, buscaría en %ProgramFiles(x86)% para un Windows de 64 bits, o en %ProgramFiles% para un Windows de 32 bits.

Para saber si es de 32 o 64 bits:

if exist "windir%\SysWoW64\cmd.exe" ==>> si el archivo existe, es un Windows de 64 bits.
0