Commande IF en BATCH ne veut pas fonctionner :'(

Résolu/Fermé
BenjaminA2mains Messages postés 43 Date d'inscription dimanche 1 août 2021 Statut Membre Dernière intervention 5 février 2023 - Modifié le 21 juin 2022 à 18:24
BenjaminA2mains Messages postés 43 Date d'inscription dimanche 1 août 2021 Statut Membre Dernière intervention 5 février 2023 - 24 juin 2022 à 14:00
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 :
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:

2 réponses

barnabe0057 Messages postés 14439 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 14 avril 2024 4 905
Modifié le 21 juin 2022 à 20:33
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 ?


0
brucine Messages postés 14219 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 avril 2024 1 792
21 juin 2022 à 20:21
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  COLORATION DE LA LIGNE DE COMMANDE 

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.
0
BenjaminA2mains Messages postés 43 Date d'inscription dimanche 1 août 2021 Statut Membre Dernière intervention 5 février 2023
Modifié le 21 juin 2022 à 23:14
Salut, barnabe
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
0
BenjaminA2mains Messages postés 43 Date d'inscription dimanche 1 août 2021 Statut Membre Dernière intervention 5 février 2023 > brucine Messages postés 14219 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 avril 2024
21 juin 2022 à 23:19
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
0
brucine Messages postés 14219 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 avril 2024 1 792 > BenjaminA2mains Messages postés 43 Date d'inscription dimanche 1 août 2021 Statut Membre Dernière intervention 5 février 2023
Modifié le 22 juin 2022 à 00:07
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  BONJOUR 


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.
0
BenjaminA2mains Messages postés 43 Date d'inscription dimanche 1 août 2021 Statut Membre Dernière intervention 5 février 2023 > BenjaminA2mains Messages postés 43 Date d'inscription dimanche 1 août 2021 Statut Membre Dernière intervention 5 février 2023
22 juin 2022 à 00:45
J'ai essayer ta proposition barnabe, ça marche maintenant et j'ai testé CERTUTIL, et c'est bien pratique.
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.
0
BenjaminA2mains Messages postés 43 Date d'inscription dimanche 1 août 2021 Statut Membre Dernière intervention 5 février 2023
24 juin 2022 à 14:00
Tout fonctionne parfaitement, merci pour votre aide :D
Prenez soin de vous
0