{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 %%
Yo, en tu lugar, ni siquiera pondría los ""
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.”
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.”
En tu lugar, en vez de dejar que el usuario ingrese la ruta de OpenVPN, yo la buscaría por mí mismo :
“La inteligencia artificial se define como lo contrario de la estupidez natural.”
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í?
“La inteligencia artificial se define como lo contrario de la estupidez natural.”
: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.”
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.
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.
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 cuanto a tu problema, prueba así:
¡Gracias por ayudarme de todos modos!