{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 -
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
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
A voir également:
- If exist
- Batch if not exist - Meilleures réponses
- If not exist batch - Meilleures réponses
- Ssh_init: host does not exist - Forum Webmastering
- The realtek network controller was not found. if deep sleep mode is enabled please plug the cable ✓ - Forum Pilotes (drivers)
- Fonction if not exist > goto - Forum Autoit / batch
- If char ✓ - Forum Programmation
- The Realtek Network Controller was not found. - Forum Pilotes (drivers)
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 %%
Moi à ta place je ne mettrais même pas les ""
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.”
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.”
A ta place, au lieu de laisser l'utilisateur rentrer le chemin d'OpenVPN, j'irai le chercher moi-même :
“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
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 :
“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
: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.”
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
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
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
Concernant ton problème, essaie comme ça :
Merci de m'aider en tout cas !