Commande IF en BATCH ne veut pas fonctionner :'(
Résolu
BenjaminA2mains
Messages postés
44
Statut
Membre
-
BenjaminA2mains Messages postés 44 Statut Membre -
BenjaminA2mains Messages postés 44 Statut Membre -
Bonjour à tous, j'espère que vous vous portez bien même pendant cette période de hautes chaleurs.
J'ai un problème assez gênant…
Je m'explique, mon script en batch va travailler avec un token (pas les tokens des boucle FOR).
Ce token va être détecter via cette fameuse commande IF.
Si elle est détectée, le script demandé à l'utilisateur si il souhaite réutilisé le dernier token en mémoire ou non.
Si oui, il décrypte le token, copie le token dans une variable, et réencrypte le token.
Si non, il supprime le fichier du token et revient à la recherche du token pour aller directement à la demande du script.
Si le token n'est pas trouvé alors il demande à l'utilisateur de donner ce token.
J'ai sûrement une toute petite erreur de rien du tout, mais je n'arrive pas à la voir et ça me rend fou..
Aidez-moi s'il vous plait
P.S :
- "batbox" est un programme qui permet de jouer avec les couleurs de la console.
- "Base64Convertcmd" le programme qui va décrypter le token et le réencrypter.
- Les lignes du style :
sont juste mes logs.
Le script :
---------------------------------------------------------------------------------
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤBenjamin
J'ai un problème assez gênant…
Je m'explique, mon script en batch va travailler avec un token (pas les tokens des boucle FOR).
Ce token va être détecter via cette fameuse commande IF.
Si elle est détectée, le script demandé à l'utilisateur si il souhaite réutilisé le dernier token en mémoire ou non.
Si oui, il décrypte le token, copie le token dans une variable, et réencrypte le token.
Si non, il supprime le fichier du token et revient à la recherche du token pour aller directement à la demande du script.
Si le token n'est pas trouvé alors il demande à l'utilisateur de donner ce token.
J'ai sûrement une toute petite erreur de rien du tout, mais je n'arrive pas à la voir et ça me rend fou..
Aidez-moi s'il vous plait
P.S :
- "batbox" est un programme qui permet de jouer avec les couleurs de la console.
- "Base64Convertcmd" le programme qui va décrypter le token et le réencrypter.
- Les lignes du style :
ECHO %date:~0,2%/%date:~3,2%/%date:~6,4% %time:~0,8% ^| Vérifie la présence de token >> Log.log
sont juste mes logs.
Le script :
:TOKEN ECHO %date:~0,2%/%date:~3,2%/%date:~6,4% %time:~0,8% ^| Vérifie la présence de token >> Log.log IF NOT EXIST "token.tkn" ( ECHO %date:~0,2%/%date:~3,2%/%date:~6,4% %time:~0,8% ^| Aucun token trouvé >> Log.log CLS ( batbox /c 0x7 ) TYPE %msg_02% ( batbox /c 0x2 ) SET /P b= IF %b%== retour GOTO CHEMIN ECHO %b% >> token.tkn .\exe\Base64Convertcmd /c 0 /l 0 token.tkn token.tkn ECHO %date:~0,2%/%date:~3,2%/%date:~6,4% %time:~0,8% ^| Écrit et encrypte le token >> Log.log GOTO DL ) ELSE ( ECHO %date:~0,2%/%date:~3,2%/%date:~6,4% %time:~0,8% ^| Token trouvé >> Log.log ( batbox /c 0x7 ) TYPE %msg_04% ( batbox /c 0x2 ) SET /P e= IF %e%= oui GOTO OUI IF %e%= o GOTO OUI IF %e%= y GOTO OUI IF %e%= non GOTO NON IF %e%= n GOTO NON :OUI ECHO %date:~0,2%/%date:~3,2%/%date:~6,4% %time:~0,8% ^| Décrypt le token >> Log.log .\exe\Base64Convertcmd /c 2 /l 0 token.tkn token.tkn FOR /F %%a IN (token.tkn) DO ( SET %b%=%%a ECHO %date:~0,2%/%date:~3,2%/%date:~6,4% %time:~0,8% ^| Récupère le token décrypter >> Log.log .\exe\Base64Convertcmd /c 0 /l 0 token.tkn token.tkn ECHO %date:~0,2%/%date:~3,2%/%date:~6,4% %time:~0,8% ^| Réencrypte le token >> Log.log GOTO DL ) :NON DEL token.tkn ECHO %date:~0,2%/%date:~3,2%/%date:~6,4% %time:~0,8% ^| Supprime le token en mémoire >> Log.log GOTO TOKEN )
---------------------------------------------------------------------------------
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤBenjamin
2 réponses
-
Bonjour,
Je me suis permis de corriger quelques détails :
:TOKEN set "horodatage=%date:~0,2%/%date:~3,2%/%date:~6,4% %time:~0,8%" set "log=Log.log" set "token=token.tkn" ECHO %horodatage% ^| Vérifie la présence de token >> %log% IF NOT EXIST "%token%" ( ECHO %horodatage% ^| Aucun token trouvé >> %log% CLS batbox /c 0x7 TYPE %msg_02% batbox /c 0x2 SET /P "b= " IF "%b%"=="retour" GOTO CHEMIN ECHO %b% >> %token% .\exe\Base64Convertcmd /c 0 /l 0 %token% %token% ECHO %horodatage% ^| Écrit et encrypte le token >> %log% GOTO DL ) ELSE ( ECHO %horodatage% ^| Token trouvé >> %log% batbox /c 0x7 TYPE %msg_04% batbox /c 0x2 ) SET /P "e= " IF "%e%"=="oui" GOTO OUI IF "%e%"=="o" GOTO OUI IF "%e%"=="y" GOTO OUI IF "%e%"=="non" GOTO NON IF "%e%"=="n" GOTO NON :OUI ECHO %horodatage% ^| Décrypt le token >> %log% .\exe\Base64Convertcmd /c 2 /l 0 %token% %token% FOR /F %%a IN (%token%) DO ( SET "b=%%a" ECHO %horodatage% ^| Récupère le token décrypter >> %log% .\exe\Base64Convertcmd /c 0 /l 0 %token% %token% ECHO %horodatage% ^| Réencrypte le token >> %log% GOTO DL ) exit :NON DEL %token% ECHO %horodatage% ^| Supprime le token en mémoire >> %log% GOTO TOKEN
Pourquoi utiliser une commande externe alors que la commande native CERTUTIL permet de décoder/encoder en Base64 ?
-
Bonjour,
à noter que les variables msg et l'étiquette chemin n'existent pas; on peut par ailleurs colorer la ligne de commande et le texte associé sans utilitaire tiers en faisant l'echo d'une séquence d'échappement sur le style:
echo [101;93m COLORATION DE LA LIGNE DE COMMANDE [0m
jaune sur fond rouge dans cet exemple.
Enfin, en l'absence de @echo off, on va observer des hiéroglyphes dans la console du fait des accents: utiliser CHCP 65001. -
-
Salut brucine,
Tu peux m'en dire un peu plus " l'echo d'une séquence d'échappement sur le style ", je ne suis pas sûr de comprendre.
Plus haut dans mon script j'utilise @echo off et CHCP 65001
Voici mon en-tête que je met à chaque script que je fais en bat, si tu as des recommandations à me faire :)
@ECHO OFF SETLOCAL EnableDelayedExpansion CLS chcp 65001 > nul COLOR 02 CD %~dp0
Merci pour ton commentaire -
Je n'avais pas vu ta page de code, on n'a qu'une partie de ton script.
Il existe à ma connaissance au moins 3 moyens de colorer la console sans commande externe:
-en personnalisant le prompt par des séquences ANSI https://ss64.com/nt/prompt.html; par exemple:
prompt $e[40;33;1m$D$S$T$H$H$H$H$H$H$e[32;40;1m$G$S
va me rendre l'heure jj/mm/aaaa hh:mm en jaune sur noir (40,33) suivie du prompt et des commandes suivantes en vert sur noir (32,40).
Ce changement est persistant jusqu'à spécification d'autre chose.
-par la commande COLOR: https://ss64.com/nt/color.html
COLOR F4 va colorer l'intégralité de la console en rouge (4) sur blanc vif (F).
-via des séquences d'échappement ESC commandées par la commande ECHO, on en doit la synthèse à Michele Locati https://github.com/mlocati
Ainsi par exemple:
echo [44m BONJOUR [0m
me rend BONJOUR en blanc sur fond bleu, et uniquement pour la ligne concernée par cette séquence.
Je n'arrive pas à copier les caractères de sorte qu'on les voit: il y a à gauche de 44 et de 0 une séquence d'échappement obtenue comme suit (une fois réalisée une fois, par contre, on peut la copier-coller):
https://ss64.com/nt/syntax-ansi.html
On peut y faire toutes les fantaisies, y compris écrire une partie d'une ligne différemment d'une autre; je tiens les codes couleur à ta disposition s'ils t'intéressent. -
-
-
Tout fonctionne parfaitement, merci pour votre aide :D
Prenez soin de vous
