{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 -
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
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
-
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.”-
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 -
-
-
-
-
-
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.” -
¿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.”-
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?- 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.
-