{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

  1. 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
    1. 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
    2. 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
    3. 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
    4. Tinouboom Mensajes publicados 12 Estado Miembro
       
      No funciona...

      ¡Gracias por ayudarme de todos modos!
      0
    5. 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
  2. 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
    1. 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
  3. 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
    1. 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
      1. 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