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

Résolu
Tinouboom Messages postés 12 Statut Membre -  
barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    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.”
    0
    1. Tinouboom Messages postés 12 Statut Membre
       
      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
      0
    2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > Tinouboom Messages postés 12 Statut Membre
       
      Quand tu postes du code, il faut utiliser les balises de coloration syntaxique.

      Concernant ton problème, essaie comme ça :
      set chemin="%ProgramFiles%\OpenVPN" 
      0
    3. Tinouboom Messages postés 12 Statut Membre > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Comment faire ? Désolé, première fois sur le forum.
      0
    4. Tinouboom Messages postés 12 Statut Membre
       
      Ca ne fonctionne pas...

      Merci de m'aider en tout cas !
      0
    5. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > Tinouboom Messages postés 12 Statut Membre
       
      Quand tu rédiges un message, il y a les balises dans le coin à droite, c'est celle avec les symboles <>
      0
  2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    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.”
    0
    1. Tinouboom Messages postés 12 Statut Membre
       
      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
      0
  3. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    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.”
    0
    1. Tinouboom Messages postés 12 Statut Membre
       
      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 ?
      0
      1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > Tinouboom Messages postés 12 Statut Membre
         
        Oui 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
        0