{batch} IF NOT EXIST <mon folder> ne fonctionne pas [Résolu/Fermé]

Signaler
Messages postés
11
Date d'inscription
mardi 13 juin 2017
Statut
Membre
Dernière intervention
19 juin 2017
-
Messages postés
12721
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
12 octobre 2020
-
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

Messages postés
12721
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
12 octobre 2020
3 662
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.”
Messages postés
11
Date d'inscription
mardi 13 juin 2017
Statut
Membre
Dernière intervention
19 juin 2017

Ca ne fonctionne pas...

Merci de m'aider en tout cas !
Messages postés
12721
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
12 octobre 2020
3 662 >
Messages postés
11
Date d'inscription
mardi 13 juin 2017
Statut
Membre
Dernière intervention
19 juin 2017

Comme ça alors :
set chemin="%ProgramFiles(x86)%\OpenVPN"
Messages postés
12721
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
12 octobre 2020
3 662 >
Messages postés
12721
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
12 octobre 2020

Quand tu utilises IF EXIST ou bien IF NOT EXIST met toujours des "" pour entourer ton chemin/dossier :

IF NOT EXIST "%chemin%\easy-rsa" (GOTO :erreur_chemin2) 
Messages postés
11
Date d'inscription
mardi 13 juin 2017
Statut
Membre
Dernière intervention
19 juin 2017

Super, la valeur par défaut fonctionne, cependant, l'utilisateur ne peut pas rentrer ce chemin à la main (redirigé vers :erreur_chemin2).
J'ai toujours pu écrire
cd "C:\Program Files (*86)\Openvpn"

dans la console, mais là, peut-être à cause du "IF NOT EXIST", il me dit que le chemin n'est pas le bon (ça ne marche pas avec ta syntaxe non plus).
Messages postés
11
Date d'inscription
mardi 13 juin 2017
Statut
Membre
Dernière intervention
19 juin 2017

Alors la valeur par défaut fonctionne lorsqu'il n'y a PAS les guillemets dans le IF NOT EXIST. Lorsque je les ai rajoutés, j'étais redirigé vers l'erreur_chemin2
Etrange non ?
Messages postés
12721
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
12 octobre 2020
3 662
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.”
Messages postés
11
Date d'inscription
mardi 13 juin 2017
Statut
Membre
Dernière intervention
19 juin 2017

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
Messages postés
12721
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
12 octobre 2020
3 662
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.”
Messages postés
11
Date d'inscription
mardi 13 juin 2017
Statut
Membre
Dernière intervention
19 juin 2017

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 ?
Messages postés
12721
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
12 octobre 2020
3 662 >
Messages postés
11
Date d'inscription
mardi 13 juin 2017
Statut
Membre
Dernière intervention
19 juin 2017

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