Signaler

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

Posez votre question Tinouboom 11Messages postés mardi 13 juin 2017Date d'inscription 19 juin 2017 Dernière intervention - Dernière réponse le 13 juin 2017 à 15:24 par barnabe0057
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
Afficher la suite 
Utile
+0
plus moins
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.”
Tinouboom 11Messages postés mardi 13 juin 2017Date d'inscription 19 juin 2017 Dernière intervention - 13 juin 2017 à 14:19
Ca ne fonctionne pas...

Merci de m'aider en tout cas !
Répondre
barnabe0057 11427Messages postés lundi 2 mars 2009Date d'inscription ContributeurStatut 12 août 2017 Dernière intervention - 13 juin 2017 à 14:22
Comme ça alors :
set chemin="%ProgramFiles(x86)%\OpenVPN"
Répondre
barnabe0057 11427Messages postés lundi 2 mars 2009Date d'inscription ContributeurStatut 12 août 2017 Dernière intervention - 13 juin 2017 à 14:26
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) 
Répondre
Tinouboom 11Messages postés mardi 13 juin 2017Date d'inscription 19 juin 2017 Dernière intervention - 13 juin 2017 à 14:35
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).
Répondre
Tinouboom 11Messages postés mardi 13 juin 2017Date d'inscription 19 juin 2017 Dernière intervention - 13 juin 2017 à 14:40
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 ?
Répondre
Donnez votre avis
Utile
+0
plus moins
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.”
Tinouboom 11Messages postés mardi 13 juin 2017Date d'inscription 19 juin 2017 Dernière intervention - 13 juin 2017 à 14:52
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
Répondre
Donnez votre avis
Utile
+0
plus moins
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.”
Tinouboom 11Messages postés mardi 13 juin 2017Date d'inscription 19 juin 2017 Dernière intervention - 13 juin 2017 à 15:14
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 ?
Répondre
barnabe0057 11427Messages postés lundi 2 mars 2009Date d'inscription ContributeurStatut 12 août 2017 Dernière intervention - 13 juin 2017 à 15:24
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
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !