Commande IF en BATCH ne veut pas fonctionner :'(
Résolu
BenjaminA2mains
Messages postés
43
Date d'inscription
Statut
Membre
Dernière intervention
-
BenjaminA2mains Messages postés 43 Date d'inscription Statut Membre Dernière intervention -
BenjaminA2mains Messages postés 43 Date d'inscription Statut Membre Dernière intervention -
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
A voir également:
- Commande IF en BATCH ne veut pas fonctionner :'(
- Invite de commande - Guide
- Commande terminal mac - Guide
- Fichier batch - Guide
- Commande dism - Guide
- Diskpart commande - Guide
2 réponses
Bonjour,
Je me suis permis de corriger quelques détails :
Pourquoi utiliser une commande externe alors que la commande native CERTUTIL permet de décoder/encoder en Base64 ?
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 ?
à 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.
Je ne connaissais pas l'existence de CERTUTIL, je vais me renseigner sur ça.
Par contre si j'utilise une variable pour la date et l'heure, mon heure sera fix et sera définit seulement sur le moment ou le script sera lancé non ?
Merci pour ton commentaire
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 :)
Merci pour ton commentaire
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:
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.
Il rend même indisponible la visualisation du texte quand il est décodé. (voir image)
Merci encore, CERTUTIL à l'air d'être très complet.