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

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

barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
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
Tinouboom Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > Tinouboom Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
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
Tinouboom Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   > barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention  
 
Comment faire ? Désolé, première fois sur le forum.
0
Tinouboom Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
Ca ne fonctionne pas...

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