Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[Résolu] Problème curieux
Auteur Message
Répondre en citant
Message [Résolu] Problème curieux 
Bonjour à tous !
Désolé de vous déranger, mais j'ai un problème (oui bon vu le topic c'est plutôt attendu :/)
En clair, j'ai un programme pour crypter un message, en intégrant une variable à 6 chiffres.
Le programme s'utilise comme une sorte de commande externe.
Voici le code complet (pour contextualiser) du programme ainsi que du call:
Dans les programmes, il y a plein de echo qui sont là pour le débogage (voir là où sa crash)

CRYPT-Z: (j'ai enlevé le debug) donc les trucs moches
Code:
setlocal enabledelayedexpansion enableextensions
set msg=%1
call :taille "%msg%"
set cdT=%2
set cd1=%cdT:~0,2%&set cd2=%cdT:~2,2%&set cd3=%cdT:~4,2%&set cd4=%cdT:~1,2%&set cd5=%cdT:~3,2%&set cd6=%cdT:~5,1%%cdT:~0,1%
echo cd1=%cd1%
echo cd2=%cd2%
echo cd3=%cd3%
echo cd4=%cd4%
echo cd5=%cd5%
echo cd6=%cd6%
echo taille=%taille%
set n=0
set cr=-
set mod=2
set max=41
set /a max_taille=%taille%+1
pause
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal enabledelayedexpansion enableextensions
for /l %%a in (1,1,%taille%) do (
call :decalage_n
call :trans1
call :mod1
call :trans2
call :mod2
call :carac_mod
call :changement
)
echo Message: !cr:~1,%taille%!
goto:eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:taille
for /f "tokens=1,* delims=[]" %%a in ('
  "%comspec% /u /c echo:%~1|more|find /n /v """
 ') do set /a "taille=%%a-4"
goto:eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:changement
if %mod%==1 set cr=%cr%a
if %mod%==2 set cr=%cr%b
if %mod%==3 set cr=%cr%c
if %mod%==4 set cr=%cr%d
if %mod%==5 set cr=%cr%e
if %mod%==6 set cr=%cr%f
if %mod%==7 set cr=%cr%g
if %mod%==8 set cr=%cr%h
if %mod%==9 set cr=%cr%i
if %mod%==10 set cr=%cr%j
if %mod%==11 set cr=%cr%k
if %mod%==12 set cr=%cr%l
if %mod%==13 set cr=%cr%m
if %mod%==14 set cr=%cr%n
if %mod%==15 set cr=%cr%o
if %mod%==16 set cr=%cr%p
if %mod%==17 set cr=%cr%q
if %mod%==18 set cr=%cr%r
if %mod%==19 set cr=%cr%s
if %mod%==20 set cr=%cr%t
if %mod%==21 set cr=%cr%u
if %mod%==22 set cr=%cr%v
if %mod%==23 set cr=%cr%w
if %mod%==24 set cr=%cr%x
if %mod%==25 set cr=%cr%y
if %mod%==26 set cr=%cr%z
if %mod%==27 set cr=%cr%.
if %mod%==28 set cr=%cr%,
if %mod%==29 set cr=%cr%?
if %mod%==30 set cr=%cr%0
if %mod%==31 set cr=%cr%1
if %mod%==32 set cr=%cr%2
if %mod%==33 set cr=%cr%3
if %mod%==34 set cr=%cr%4
if %mod%==35 set cr=%cr%5
if %mod%==36 set cr=%cr%6
if %mod%==37 set cr=%cr%7
if %mod%==38 set cr=%cr%8
if %mod%==39 set cr=%cr%9
if %mod%==40 set cr=%cr%@
goto:eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:carac_mod
set car=!msg:~%n%!
echo caractere: %car%
if %car%==a set /a mod+=1
if %car%==b set /a mod+=2
if %car%==c set /a mod+=3
if %car%==d set /a mod+=4
if %car%==e set /a mod+=5
if %car%==f set /a mod+=6
if %car%==g set /a mod+=7
if %car%==h set /a mod+=8
if %car%==i set /a mod+=9
if %car%==j set /a mod+=10
if %car%==k set /a mod+=11
if %car%==l set /a mod+=12
if %car%==m set /a mod+=13
if %car%==n set /a mod+=14
if %car%==o set /a mod+=15
if %car%==p set /a mod+=16
if %car%==q set /a mod+=17
if %car%==r set /a mod+=18
if %car%==s set /a mod+=19
if %car%==t set /a mod+=20
if %car%==u set /a mod+=21
if %car%==v set /a mod+=22
if %car%==w set /a mod+=23
if %car%==x set /a mod+=24
if %car%==y set /a mod+=25
if %car%==z set /a mod+=26
if %car%==. set /a mod+=27
if %car%==, set /a mod+=28
if %car%==? set /a mod+=29
if %car%==0 set /a mod+=30
if %car%==1 set /a mod+=31
if %car%==2 set /a mod+=32
if %car%==3 set /a mod+=33
if %car%==4 set /a mod+=34
if %car%==5 set /a mod+=35
if %car%==6 set /a mod+=36
if %car%==7 set /a mod+=37
if %car%==8 set /a mod+=38
if %car%==9 set /a mod+=39
if %car%==@ set /a mod+=40
:loop_carac_mod
if %mod% GTR %max% (
set /a mod-=40
goto loop_carac_mod
)
goto:eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:decalage_n
set /a n+=1
if %n%==7 set n=1)
goto:eof

:trans1
set cd=!cd%n%:~0!
goto:eof

:trans2
set cd=!cd%n%:~1!
goto:eof

:mod1
for /l %%b in (0,1,%cd%) do (
call :ext-mod1
)
goto:eof

:ext-mod1
set /a mod+=1
if %mod%==%max% set mod=1)
goto:eof

:mod2
for /l %%c in (0,1,%cd%) do (
call :ext-mod2
)
goto:eof

:ext-mod2
set /a mod+=1
if %mod%==%max% set mod=1)
goto:eof



LANCEUR:
Code:
@echo off
title CRYPT-Z
echo cryptage...
call crypt-Z.sys MESSAGE 123456
echo Appuyez pour fermer.
pause>nul
exit


Donc, dans crypt-z, c'est la boucle centrale qui pose problème:
Code:
for /l %%a in (1,1,%taille%) do (
call :decalage_n
echo n=%n%
call :trans1
call :mod1
call :trans2
call :mod2
echo mod(2)=%mod%
call :carac_mod
echo mod avec carac= %mod%
call :changement
echo update crypt=%cr%
)


J'ai découvert que c'était ici car j'ai mis un pause par là, puis par ici, puis là... enfin partout, et c'est cette ligne qui déconne:
Code:
]for /l %%a in (1,1,%taille%) do (


Bon, jusque là rien de bien méchant, mais le problème c'est que le message d'erreur est "1 était inattendu"
Et j'ai cherché, modifier des variable et tout, et en fait ce 1 c'est la variable mod !
(si je met mod=0, alors 0 était inattendu, si je met mod=2, alors 2 est inattendu etc...)



Donc voilà ma demande: pourquoi donc le programme crash-t-il à une boucle for à cause d'une variable que cette boucle n'utilise pas, et -si vous avez le temps- comment corriger ce problème ?

Merci d'avance !

timothe_2000



Dernière édition par timothe_2000 le Jeu 10 Mar 2016 - 16:22; édité 3 fois
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message Re: [Batch] Problème curieux 
timothe_2000 a écrit:
Code:
for /l %%a in (1,1,%taille%) do (
call :decalage_n
echo n=%n%
call :trans1
call :mod1
call :trans2
call :mod2
echo mod(2)=%mod%
call :carac_mod
echo mod avec carac= %mod%
call :changement
echo update crypt=%cr%
)

Déjà, je sais pas si c'est ça le seul problème, mais pour être sûr que ça marche, prends l'habitude de mettre "setlocal enabledelayedexpansion enableextensions" avant ton FOR et de mettre !variable! au lieu de %variable% dans le do, ce qui donne

Code:
setlocal enabledelayedexpansion enableextensions
for /l %%a in (1,1,%taille%) do (
call :decalage_n
echo n=!n!
call :trans1
call :mod1
call :trans2
call :mod2
echo mod(2)=!mod!
call :carac_mod
echo mod avec carac= !mod!
call :changement
echo update crypt=!cr!
)





______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message [Résolu] Problème curieux 
J'ai appliqué ta boucle mais j'obtiens "!mod! était inattendu"



Répondre en citant
Message [Résolu] Problème curieux 
Dans ce cas vire le @echo off, et exécute le batch en l'appelant (si tu cliques dessus, au moindre problème ça crash et tu peux pas lire, si tu le lance depuis cmd.exe, la fenêtre restera ouverte)




______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message [Résolu] Problème curieux 
c'est super étrange
j'ai viré tous les echo et maintenant je message d'erreur fait que %mod% est vidé, et que du coup "(set" est inattendu...



Répondre en citant
Message [Résolu] Problème curieux 
Vérifies que tu n'aies pas de "set mod=" ou que tu n'aies pas mis de !variable! en dehors d'une boucle for Okay




______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message [Résolu] Problème curieux 
Ba ya que les
Code:
set cd=!cd%n%:~0!


et le
Code:
echo Message: !cr:~1,%taille%!


qui lui n'est pas dans la for



Répondre en citant
Message [Résolu] Problème curieux 
Que fonts tes () dans ton set :
Code:
echo mod(2)=!mod!


Il me semble que ça pose problème (bug du batch), les parenthese sont faites pour for, if et set /a.




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [Résolu] Problème curieux 
TSnake41 a écrit:
Que fonts tes () dans ton set :
Code:
echo mod(2)=!mod!

Euh tu montres un ECHO là Mr. Green




______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message [Résolu] Problème curieux 
Oui c'est echo Smile
Mais bon je l'ai viré dans tous les cas et sa continue à déconner



Répondre en citant
Message [Résolu] Problème curieux 
Euh je viens de voir un truc: sa crash au dernier tour de la for (donc si y'a 5 caractères, ba ça crash au 5e tour).
Voilà les dernières commandes effectuée, en vert le code, en rouge le retour cmd. (avec n=6 donc 6 et dernier caractère)

set car=!msg:~%n%! >>> set car=!msg:~6!
echo caractere: %car% >>> echo caractere:
if %car%==a set /a mod+=1>>> if ==a
>crash: set était inattendu

Si vous savez pourquoi...



Répondre en citant
Message [Résolu] Problème curieux 
C'est juste la variable qui est vide au dernier tour, c'est logique non? Smile
Met des guillemets
Code:
if "%car%"=="a" set /a mod+=1





______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message [Résolu] Problème curieux 
Ah ouiii x)
Merci beaucoup sa marche niquel <3
Je met en résolu Wink



Dernière édition par timothe_2000 le Mer 9 Mar 2016 - 20:27; édité 1 fois
Répondre en citant
Message [Résolu] Problème curieux 
Ah ouiii x)
Merci beaucoup sa marche niquel <3
Je met en résolu Wink



Message [Résolu] Problème curieux 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch