{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 -
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
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
-
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.”-
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 -
-
-
-
-
-
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.” -
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.”-
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 ?- 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
-