Aller au contenu
Zebulon
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[résolu][Batch]Problème avec un programme qui se ferme sans raison


Fëanólë

Messages recommandés

Bonsoir à tous !

 

J'ai un problème avec un petit batch que je suis en train de faire. Voici le code :

 

@echo off
:debut
set /p nom="Entrez le nom du fichier txt à lire (sans l'extension) : "
If exist %nom%.txt goto nomok
echo Le fichier %nom%.txt n'existe pas !
echo Vous allez être redirigé au début du programme, appuyez sur une touche...
pause>nul
goto debut
:nomok
echo Vous avez séléctionné %nom%.txt
echo.
echo Le fichier créé dans le répertoire courant se nommera apn%nom%.txt
echo Assurez-vous que le fichier destination n'existe pas déjà
echo.
choice /n /t:o,3 "Patientez 3s pour continuer ou appuyez sur N pour annuler"
goto %errorlevel%
:2
goto debut
:1
for /f "tokens=1*" %a in (%nom%.txt) do (
echo :fdv%a
echo "C:\Program Files\3GLanceur\3G.exe" %b PASSWORD
echo goto fin
echo.
)>>apn%nom%.txt
pause
echo Le fichier a été créé :
echo copiez son contenu dans apn.bat entre les lignes "goto fdv et ":fin".
echo Appuyez sur une touche pour quitter le programme...
pause>nul
exit

 

Le programme se ferme brusquement quand il arrive à la commande for après l'étiquette :1.

J'ai beau chercher, je ne vois pas où est le problème.

 

C'est d'autant plus étonnant que quand je sépare les deux moitié du code en deux batchs différents, le premier allant jusqu'à l'étiquette :1 sans rien faire d'autre que de m'afficher des lignes de textes pour que je voie s'il a marché ou pas et le deuxième commençant avec la commande for (après un set nom=fichier), les deux ne présentent aucune anomalie : les messages s'affichent normallement, la commande choice fonctionne sans problème (même si j'ai galéré dessus un moment), le fichier apn%nom%.txt est créé avec le texte voulu...

Donc je pense qu'il doit y avoir un conflit entre des variables, mais je ne sais pas où.

 

Merci d'avance de votre aide ! :P

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Eh set /p et choice.exe ?

enfin bref... ton prog ne s'execute pas car tu a mis un echo devant, donc il affiche le chemin du programme plutot que de l'executer...

 

remplacer:

echo "C:\Program Files\3GLanceur\3G.exe" %b PASSWORD
par:
Start /WAIT "C:\Program Files\3GLanceur\3G.exe" %b PASSWORD
Lien vers le commentaire
Partager sur d’autres sites

Hum, je ne veux pas executer le programme 3G.exe, je veux afficher la ligne de caractères qui contient le chemin dans le fichier apn%nom%.txt.

Donc ma ligne est correcte, je crois... enfin encore une fois, quand la deuxième moitié du programme est lancée "indépendemment" de la permière, tout fonctionne, donc je ne pense pas qu'il y ait un problème de syntaxe de ce genre.

 

Sinon, pour set /p et choice.exe, je ne vois pas le problème... je suis sous Vista, donc la commande choice est déjà présente...

Modifié par Fëanólë
Lien vers le commentaire
Partager sur d’autres sites

hum essai en remplacant:

goto %errorlevel%

par

If ERRORLEVEL 14 goto debut
goto 1

A moins que ton choice.exe ne fonctione pas comme le choice.com du dos... (a voir)

EDIT: oublie j'ai testé et ca ne fonctionne pas...

ta methode est bonne pour choice sous vista.

 

Sinon il y a aussi une erreur dans ta boucle for, je pense que c'est %%a au lieu de %a

 

++

Lien vers le commentaire
Partager sur d’autres sites

C'est bon, ça marche !

 

J'ai fait deux petits changements :

 

choice /c:on /n /t:o,3 "Patientez 3s pour continuer ou appuyez sur N pour annuler"
if %errorlevel%==2 goto debut

for /f "tokens=1*" %%a in (%nom%.txt) do (
echo :fdv%%a
echo "C:\Program Files\3GLanceur\3G.exe" %%b PASSWORD
echo goto fin
echo.
)>>apn%nom%.txt

 

if %errorlevel%==2 goto à la place de goto %errorlevel%, mais ça c'était pour faire joli, et surtout %%a et %%b au lieu de %a et %b. Donc merci sebdraluorg ! Merci aussi Gen et Mortbise qui m'ont aidé sur le chat.

 

Si possible, j'aimerais une explication... pourquoi deux % sont nécessaires dans certains cas et pas dans d'autres ?

Modifié par Fëanólë
Lien vers le commentaire
Partager sur d’autres sites

re,

 

content que ca marche :P

 

Si possible, j'aimerais une explication... pourquoi deux % sont nécessaires dans certains cas et pas dans d'autres
Eh bah en fait c'est propre a la commande for sans doute pour eviter que cmd cherche une valeur dans %%a dans le constructeur de la boucle...

Je ne pense pas qu'il y ai d'autres cas ou on utilise 2 "%"

 

++

Lien vers le commentaire
Partager sur d’autres sites

Le problème semble avoir trouvé sa solution.

Ainsi, afin de signaler clairement à ceux qui ont un problème similaire qu'ils ont peut-être une solution toute trouvée (s'ils pensent à utiliser la fonction Recherche en indiquant le mot-clé "résolu" auparavant), et afin de signaler aux autres contributeurs qu'il est inutile de continuer à se creuser la tête sur le problème (à moins d'avoir des suppléments d'informations à apporter pour mieux comprendre ce qui posait problème), un modérateur a préfixé le titre du topic avec la mention [résolu].

Merci, à l'avenir, de bien vouloir prendre à votre charge cette mise à jour quand vous estimez que votre problème a été résolu de manière satisfaisante (et parallèlement, si le problème a disparu "mystérieusement", inutile d'induire les gens en erreur :P) Pour cela, p_edit.gif votre premier message :P

Lien vers le commentaire
Partager sur d’autres sites

@KewlCat : d'accord, je le ferai la prochaine fois (c'était un oubli, je le sais que c'est à faire).

 

@sebdraluorg :

 

Je ne pense pas qu'il y ai d'autres cas ou on utilise 2 "%"

 

Pour info, je suis tombé sur un autre cas justement : j'ai dû écrire

 

echo if ^%%errorlevel^%%==2 ( >>apn%nom%.txt

 

Pour que dans le fichier apn%nom%.txt la ligne suivante apparaisse :

 

if %errorlevel%==2 (

Modifié par Fëanólë
Lien vers le commentaire
Partager sur d’autres sites

Pour info, je suis tombé sur un autre cas justement : j'ai dû écrire

 

 

Code

echo if ^%%errorlevel^%%==2 ( >>apn%nom%.txt

 

 

Pour que dans le fichier apn%nom%.txt la ligne suivante apparaisse :

 

 

Code

if %errorlevel%==2 (

 

Oui juste en effet, c'est le meme principe, on veut envoyer le nom d'une variable et non sa valeur...

J'avais oublié ce cas mais il est un peu different, dans le cas de for on lit egalement la variable par son double %

 

++

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...