{batch} IF NOT EXIST <mon folder> ne fonctionne pas

Résolu
Bonjour à tous

Alors voilà, je veux demander à l'utilisateur d'indiquer le chemin menant au dossier d'installation d'OpenVPN (avec un chemin par défaut - cf code). Seulement, lorsque j'ai rajouter les "if" pour catch d'éventuelles erreurs, ça ne fonctionne plus, le programme se redirige constamment vers :erreur_chemin1 puis la console se ferme à la deuxième tentative (j'ai pensé que ça venait des guillemets à cause des espaces mais j'ai tout testé, rien n'y fait :) )

Merci de votre aide.

@echo off

REM L'utilisateur indique le chemin du dossier d'installation d'OpenVPN
:chemin
set /p chemin=Indiquez entre guillemets le chemin complet du dossier d'OpenVPN [par defaut (appuyez sur Entree) "C:\Program Files (*86)\OpenVPN"]:
echo.
if "%chemin%"=="" (
set chemin="C:\Program Files (*86)\OpenVPN"
)
IF NOT EXIST %chemin%\nul (
GOTO :erreur_chemin1
)
IF NOT EXIST %chemin%\easy-rsa\nul (
GOTO :erreur_chemin2
)
cd %chemin%
GOTO :choix

:erreur_chemin1
cls
echo ### Le chemin %chemin% n'est pas valide. Verifiez les espaces et les guillemets ###
echo.
set "%chemin%"==""
GOTO :chemin

:erreur_chemin2
cls
echo ### Le chemin %chemin% n'est pas le bon ###
echo.
set "%chemin%"==""
GOTO :chemin

:choix
echo Si vous voulez creer ou configurer votre serveur OpenVPN (ONLY ONCE), tapez 1 et appuyez sur Entree

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,

    Quand tu utilises set pour définir une variable, il ne faut mettre qu'un seul signe = et il ne faut pas mettre les %%
    set chemin=""

    Moi à ta place je ne mettrais même pas les ""
    set chemin=


    Concernant le "if exist" il ne faut pas mettre nul, tu mets juste le dossier.

    “L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
    1. Bonjour,

      Merci de ta réponse si rapide. Effectivement, une petite erreur d'inattention. Cependant, la gestion d'erreur ne fonctionne toujours pas.
      Ce qu'il faudrait c'est vérifier si le dossier <easy-rsa> se trouve bien dans le dossier indiqué par l'utilisateur (je pense que :erreur_chemin1 est inutile en fin de compte car inclus dans :erreur_chemin2), sauf que même la valeur par défaut ne fonctionne pas et redirige vers :erreur_chemin2.
      Une idée ?

      REM L'utilisateur indique le chemin du dossier d'installation d'OpenVPN
      :chemin
      set /p chemin=Indiquez entre guillemets le chemin complet du dossier d'OpenVPN [par defaut (appuyez sur Entree) "C:\Program Files (*86)\OpenVPN"]:
      echo.
      if "%chemin%"=="" (
      set chemin="C:\Program Files (*86)\OpenVPN"
      )
      REM IF NOT EXIST %chemin% ( ###inutile###
      REM GOTO :erreur_chemin1
      REM )

      IF NOT EXIST %chemin%\easy-rsa (
      GOTO :erreur_chemin2
      )

      cd %chemin%
      GOTO :choix

      REM :erreur_chemin1
      REM cls
      REM echo ### Le chemin %chemin% n'est pas valide. Verifiez les espaces et les guillemets ###
      REM echo.
      REM set chemin=
      REM GOTO :chemin

      :erreur_chemin2
      cls
      echo ### Le chemin %chemin% n'est pas le bon ###
      echo.
      set chemin=
      GOTO :chemin
    2. @TinouboomQuand tu postes du code, il faut utiliser les balises de coloration syntaxique.

      Concernant ton problème, essaie comme ça :
      set chemin="%ProgramFiles%\OpenVPN" 
    3. @barnabe0057Comment faire ? Désolé, première fois sur le forum.
    4. Ca ne fonctionne pas...

      Merci de m'aider en tout cas !
    5. @TinouboomQuand tu rédiges un message, il y a les balises dans le coin à droite, c'est celle avec les symboles <>
  2. A ta place, au lieu de laisser l'utilisateur rentrer le chemin d'OpenVPN, j'irai le chercher moi-même :

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



    “L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
    1. Super !

      J'ai pas tout compris à la commande mais je vais me renseigner. Cependant, "chemin" est allé jusqu'au sous-dossier contenu dans "easy-rsa" !

      Merci beaucoup, je mets RESOLU
  3. Est-ce que ça marche comme ça :

    :chemin
    rem on définit un chemin par défaut
    set chemin=%ProgramFiles(x86)%\OpenVPN\easy-rsa

    rem on se positionne dans le dossier
    cd "%ProgramFiles(x86)%"

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

    echo %chemin%
    pause

    :choix
    echo Si vous voulez creer ou configurer votre serveur OpenVPN (ONLY ONCE), tapez 1 et appuyez sur Entree



    “L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
    1. Mais en fait ça ne fonctionne que si l'utilisateur l'a installé dans Program Files (x86), non ?
      Y a t-il un moyen de chercher le dossier dans l'ensemble du disque dur ?
    2. @TinouboomOui il y a moyen mais ça va prendre trop de temps.

      A ta place je rechercherais d'abord si c'est un windows 32 bits ou 64 bits, ensuite en fonction je chercherais soit dans %ProgramFiles(x86)% pour un windows 64, soit dans %ProgramFiles% pour un windows 32

      Pour savoir si c'est un 32 ou un 64 bits :

      if exist "windir%\SysWoW64\cmd.exe" ==>> si le fichier existe c'est un windows 64