Récupérer une info d'un . txt pour un .bat

Fermé
stratoflav Messages postés 55 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 9 février 2010 - 4 févr. 2010 à 17:16
stratoflav Messages postés 55 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 9 février 2010 - 9 févr. 2010 à 09:49
Bonjour,

j'essai d'automatiser l'accès du bureau à distance via un batch.

Je m'explique, j'ai un "menu.bat" avec lequel je souhaite lancer des fichiers .rdp (bureau à distance)

Si je fais le choix de connexion, je demande le nom d'un lieu. Il va chercher le nom dans un fichier texte, s'il le trouve, il execute le fichier .rdp
S'il ne le trouve pas, il demande à l'ajouter dans le fichier texte et lance un fichier Default.rdp à modifier et enregistrer.

Seulement lorsque j'execute mon batch, même si le nom est présent dans le fichier texte, il m'indique que le nom n'existe pas et me demande si je veux l'ajouter.

Pourriez-vous me donner une piste siouplait.

Voici le code

...
:choice
set /p choice=Choisir l'option :
echo.
if '%choice%'=='1' goto bad
if '%choice%'=='2' goto ajout
if '%choice%'=='3' goto suppression
if '%choice%'=='4' goto fin
echo Le choix "%choice%" n'est pas valide !!
echo.
goto choice

:bad
echo.
set /p apc=Entrer le nom de l'APC :
for /f "delims=" %%a in (liste.txt) do (
if '%%a'=='%apc%' goto exec
if not '%%a'=='%apc%' goto error )

:exec
APC\%apc%.rdp"

:error
cls
echo Le nom "%apc%" n'est pas present dans la liste
echo.
set /p reponse=Voulez-vous l'ajouter ? [O/N] :
echo.
if not '%reponse%'=='O' goto menu

:ajout
set /p nomajout=Entrer le nom de l'APC a ajouter :
echo %nomajout% >> liste.txt
pause
cls
goto menu

...

4 réponses

BeFaX Messages postés 14245 Date d'inscription mercredi 24 décembre 2008 Statut Contributeur Dernière intervention 6 août 2013 3 812
4 févr. 2010 à 17:26
Je vois pas comment ce script peut marcher si tu ne boucle pas ta boucle ...

for /f "delims=" %%a in (liste.txt) do ( ) Débute une boucle qui liste le fichier liste.exe

Dans cette boucle tu l'envoi dans :exec ou :error et ensuite tu l'envoi retourner au menu, ca ne peut pas fonctionner.

Que contient exactement liste.txt ??
0
BeFaX Messages postés 14245 Date d'inscription mercredi 24 décembre 2008 Statut Contributeur Dernière intervention 6 août 2013 3 812
4 févr. 2010 à 18:02
Il te faudrait un code dans ce genre là :


...
@echo off

:menu
cls

echo.
echo    1. APC
echo    2. Ajout
echo    3. Suppr
echo    4. Liste
echo    5. Exit
echo -----------
set /p choice=Choisir l'option :
echo.
if '%choice%'=='1' goto apc
if '%choice%'=='2' goto ajout
if '%choice%'=='3' goto suppr
if '%choice%'=='4' more liste.txt &echo.&echo Veuillez presser une touche ...&pause>nul&goto menu
if '%choice%'=='5' exit
echo Veuillez pressez une touche entre 1 et 5 ...
pause>nul
goto menu

exit
:apc
echo.
set /p apc=Entrer le nom de l'APC :
for /f "delims=" %%a in ('type liste.txt ^| find "%apc%"') do call :exec

echo Le nom "%apc%" n'est pas present dans la liste
echo.
set /p reponse=Voulez-vous l'ajouter ? [O/N] :
if /i '%reponse%'=='n' goto menu
echo %apc%>>liste.txt
goto menu

:exec
APC\%apc%.rdp
pause
goto menu

:ajout
set /p nomajout=Entrer le nom de l'APC a ajouter, [CTRL+C] pour annuler :
echo %nomajout%>>liste.txt
goto menu 

:suppr
pause
goto menu
...
0
stratoflav Messages postés 55 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 9 février 2010 8
7 févr. 2010 à 20:59
Merci beaucoup pour ton aide.

Le fichier liste.txt contiendra soit les nom des villes / villages, soit leur Code unique à 6 chiffres.

Je regarderai ton code demain si j'ai le temps. Je te tiens au courant.

Je savais que ca venait de la boucle qui n'était pas correct, c'est souvent le cas dans mes algo aussi ;)

Cordialement
0
stratoflav Messages postés 55 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 9 février 2010 8
9 févr. 2010 à 09:49
Bonjour,

je te remercie, cela fonctionne très bien mais je voudrais une ou deux petites explication s'il te plait.

Tout d'abord, peux tu m'expliquer plus précisément la ligne de la boucle

for /f "delims=" %%a in ('type liste.txt ^| find "%apc%"') do call :exec

merci pour l'astuce du "&" permettant de mettre plusieurs commande sur une même ligne. Au passage, tu connais de bon tuto pour le batch ?

Ensuite, je sors un peu du contexte de mon script mais je me rend compte que cela ne sert a rien ma liste avec un dossier contenant un fichier .rdp par bureau. Puisque le bureau se connecte à mon serveur via une liaison VPN et qu'il attribut toujours la même ip à n'importe quel poste (jamais plusieurs connexion en même tps), un seul fichier .rdp est nécessaire. La liste devient alors superflu. Qu'en penses tu ?

Merci encore
0