Votre question

Utiliser une variables batch

Tags :
  • Batch
  • Programmation
Dernière réponse : dans Programmation
8 Octobre 2006 19:36:34

Bonjour à tous !

Alors voila, j'ai deux question :

1. Comment mettre le contenue d'un fichier texte ou autre dans une variables batch ?

2. Comment déclarer une varialbes une seule fois en indiquant plusieur lignes (tel que : "set var=xxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
Voila car dans une fichier texte, même en ne mettant pas "retour à la ligne", le texte retourne toujours a la ligne !

PS : Je voudrais mettre plusieur lignes dans la même variables car celle-ci créera par la suite des photos (donc je copierer la photo en .txt dans la variable var)

Bon merci et surtout a++

urss9

Autres pages sur : utiliser variables batch

a b L Programmation
8 Octobre 2006 19:45:56

Tout le contenu ou lire ligne par ligne ? parce qu'avec un FOR /F, tu peux lire le fichier ligne par ligne.
Quand il y a plusieurs lignes, je pense qu'il est mieux de ne pas utiliser les variables mais utiliser un fichier comme variable ;) 

Tu veux en faire quoi après de cette variable ?
11 Octobre 2006 14:25:04

re et mercie de ta réponse !

Bah en faite, je voulais faire faire une photo a mon programme tel que :
  1. echo>>"%systemdrive%\Documents and Settings\%username%\Bureau\tof.jpg" ÿØÿà JFIF ÿþ >CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality
  2. ÿÛ C
  3.  
  4. $.' ",#(7),01444'9=82<.342ÿÛ C
  5.  
  6. 2!!22222222222222222222222222222222222222222222222222ÿ " ÿÄ ÿÄ ÿÚ „ꇫkpÒÄÇ@/9aª5£ÚE°3L`Ùc‹.Ðù)L*IRHI!$„’HI!:½é0ç¼úûãìcI$°â{œë(ÏçˆÖJ¢ˆÅ°„e›VÑ(©­jæZåt1:Þœ°ÒÏ„)¦5ÃGK~Î4¯Hڏ6è»'\'†Fa¿›ˆ=‡ˆ4%ºº£-°„bmYE”$îÔr+²Û,nØš÷3-Âäú<‚°ª¿:…Á…ÃgÝdk½•,_T•† Y´d¸§ØºÃáSZ¹õ+”¦ˆNw¨|óïž°ÔHFÛ(`Á6ä‰.Øøét­ $©% %I% $$’BOu”-C–+¼Ø³Îµ»È§›Uu@rËëGò>ÚÎ¥%¤‘ÇàúWšk64ìÍWÌ©æ…_ƒ™] 9±-¡‡S"1È-]gC^y«éGÇ¿´ÒÕubÁÐÄγ£Ïçè­`®R©ª1d ÒÉ¢ÊìšwX<äµ½ÖƒLÇ¡ˆzÌûjt®kß>0Í~7>Kg˜Ö%]Í+½1¥˜u2À,Ù2\c¯]:pi­lúS)JU\Þâ—Ò2\s´XXéF»,Mòڍ)R¤’¤’BI $$’BJ´v˜v{vyþ‡¡—g¹¢G<)¾4
  7. ÅWçÅ•z_šD›ÏéYë…ð=öjIM,tže~ǼéçUL²°(…ÕnÅswwûÑæ] Øs{EBY¡6)烳¡ÏÅ©8K}u4³ŒdÑhvJT“¬]í*s*Ô©4“0A:ñùlÝ:«s´§FË'“– ]gs¦üM✧†RxZ´Ï[B\S‰]ð¨­`L¥'¨Ií*‘æËŽfšZ®O+*é ìÑ
  8. Ñ'ZŒé‘Ù%I(I!$„“Œ¯:Ì©t»–pÚ>… œ÷N5‚èftasÔÆÈ @*ªZ[a


Donc voici la première ligne de mon fichier .jpg
Donc écrire ou plutoyt copier ligne par ligne n'est pas trop faisable !

Voila merci et a++

urss9
Contenus similaires
11 Octobre 2006 17:09:11

Je peux reformulez ma question d'une autre manière ;)  tel que : Comment créer une photo en batch ?

Mercie et ++

urss9
a b L Programmation
11 Octobre 2006 19:06:01

mais ça c'est un fichier binaire avec un format précis. Tu ne peux pas le lire simplement, et encore moins en utilisant une variable.
La seule chose que tu peux faire, c'est transférer le contenu total d'un fichier binaire en utilisant la commande TYPE. La seule utilité serait de concaténer des fichiers binaires.
  1. TYPE fichier1.ext >> fichier_final.ext
  2. TYPE fichier2.ext >> fichier_final.ext

Par contre découper un fichier binaire même par blocs ou octet par octet me parait impossible (du moins je n'en ai pas trouvé lorsque j'avais cherché).

Mais tu veux faire quoi en gros ? (parce qu'en batch, il faut souvent changer complètement la technique pour contourner le problème)
11 Octobre 2006 21:43:12

Citation :
il faut souvent changer complètement la technique pour contourner le problème


Euh... oui je confirme, alors voila ce que je veux faire : Un programme (nul) lol pour créer des photos pré-enregistrer évidament !

Je pense que tu c'est comment faire pour créer un fichier à partir d'une batch, si non bah voila :

  1. @echo off
  2. echo>>"lol.bat" @echo off
  3. echo>>"lol.bat" echo Salute à tous !
  4. echo>>"lol.jpg" XX
  5. echo>>lol.bat" echo Une photos vient d'ètre créer...
  6. echo>>"lol.bat" PAUSE>nul


Voila un programme qui en créera un autre, bah de la même manière je veux créer des photos en les renommant .txt, je peux voir ou plutot copier le texte en le copiant à la place de XX

Donc une photos se créera sous le nom de lol.jpg voila c'est aussi simple mais copier ligne par ligne est trés trés long !

Donc je pense que tu as compris :D 

Voila je te remercie et a++

urss9
a b L Programmation
11 Octobre 2006 22:47:20

Moi, la redirection, je la mets toujours à la fin, mais c'est pareil (je noterais comme je fais dans la suite):
  1. echo @echo off >> lol.bat
  2. ...


Si j'ai bien compris, tu fais un batch qui lit un JPG pour le mettre dans un autre batch qui permet de recréer l'image jpg ?
Le mieux est d'utiliser un programme en ligne de commande qui transforme un fichier binaire en fichier texte (UUEncode/Decode comme uudeview), comme ça, tu peux lire le fichier ligne par ligne simplement.
Maintenant si tu veux faire ça en batch uniquement, ça devient plus compliqué mais pas infaisable grace à la commande DEBUG (qui n'est pas faite pour ça mais bon :D  ).
ATTENTION: la commande DEBUG permet de lire et d'écrire directement la mémoire du PC ainsi que de lancer du code machine, même si celui-ci est incohérent, alors à tes risques et périls.
Bon ça c'est dit, je continue :D 
Dans la commande DEBUG, il y a la commande "d [segment : offset]" pour visualiser la mémoire en hexadécimal. Donc, tu peux charger en mémoire une fichier .jpg comme si c'était un binaire exécutable (donc à ne pas faire exécuter ;)  ), faire la commande "d" plusieurs fois pour avoir la mémoire.
Avec un FOR /F, tu récupère ce qui est affiché, tu découpes les lignes pour n'avoir que les valeurs hexa des octets. Comme ça, tu obtients 16 octets par ligne.
Voilà pour la lecture.

Pour l'écriture lorsque tu as la liste des octets hexadécimaux, tu peux faire un appel à DEBUG, mais cette fois-ci en utilisant la commande "e" pour écrire en mémoire. Ensuite, tu enregistres le fichier correspondant à la mémoire (pour enregistrer faut modifier les registres BX et CX pour indiquer la taille du fichier). comme ça tu peux exporter en .jpg

Autant te dire que si tu veux faire ça, il te faut bien connaitre:
1. le redirection de l'affichage (> et >>)
2. la redirection clavier (< et <<)
3. le découpage du retour d'une commande (avec FOR /F)
4. la représentation hexadécimale

1. et 2. car DEBUG est un programme, c'est-à-dire que les entrée clavier ne sont plus les entrées claviers du DOS, mais du programme DEBUG. Donc, il faut préparer toutes les commandes à l'avance, et créer un fichier texte temporaire qui contiendra tous ces commandes (c'est la redirection de l'affichage comme tu fais avec ECHO). Ensuite tu donne ce fichier à la commande DEBUG en redirigeant l'entrée clavier vers ce nouveau fichier, par une commande du genre "DEBUG < tonFichier.txt"
3. pour récupérer le retour de DEBUG (pour lire une image)

Reste plus qu'à faire le plus compliqué: lire l'image par groupe de 16 octets et mettre le résultat dans une commande destinée à générer une commande DEBUG.
Par exemple si 3 octets sont 01 07 A4, alors il faudra générer la commande DEBUG: "e 01 07 A4", donc générer dans le .bat à générer, la commande:
  1. echo e 01 07 A4 >> commandes_debug.txt

Si tu veux générer le .bat avec cette commande, il te faudra donc une commande du style:
  1. echo echo e 01 07 A4 ^>^> commandes_debug.txt >> lol.bat

Les "^" permettent de ne pas interpréter les ">"

Ah oui, j'oubliais (parce que ça serait trop facile ;)  ), il faut penser à bien gérer la taille du fichier, donc lire la bonne taille du fichier grace à la commande DIR et un FOR /F, et générer un "SET taille=la taille trouvée" pour mémoriser cette taille lorsque le bat d'extraction de l'image sera lancé (pour enregistrer le bon nombre d'octets, c'est-à-dire bien remplir les registre BX et CX).

Voilà, donc si tu te lances dans tout ça, je te suggère de commencer par une chose simple, par exemple en commençant par faire un script qui affiche la taille (et uniquement la taille d'un fichier).

Ps: en python, c'est quand même plus simple et rapide à faire :D 
21 Octobre 2006 17:03:00

Je te remercie beaucoup de ta réponse ;)  vraiment sèrieux mais il faut que je commence a apprendre les boucles for parce-que s'il y a bien quelque-choses que je ne connais pas du tout dans le batch, c'est bien les boucles FOR :(  mais pour comprendre ta réponse, je vais l'apprendre

Donc je te remercie pour ta réponse complète !

++

urss9
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS