[Batch] quelques questions ....
Forum Programmation : [Batch] quelques questions ....
Alors voila j'ai quelque question dans le domaine du batch.
[b]Esque batch sait réfléchir ?? :-D
Exemple : esque je peu dire à l'ordi ou à DOS (je sais pas a qui m'adresser :-D ) de choisir tout seulm au hasard un nombre entre 1 et 30 ou un ombre parmis les nombre que j'aurais déjà spécifié.
[b] Batch sait couper mais esqu'il sais découper ?
Bon batch sais couper un fichier pour le coller dans un autre reprtoir mais esqu'il sais découper un fichier en 2 ou plus ??
1. oui, il y a une variable d'environnement %RANDOM% qui retourne un nombre aléatoire compris entre 0 et 32767.
donc si tu veux entre 0 et 30, il faut que ton nombre aléatoire soit divisé par 32767 et multiplié par 30. Soit:
[code]set /A val=%RANDOM% / 1092[code]
(30 ne sera jamais tiré), il faut mettre 1057 = 32767 / 31 si tu veux le 30 tirable.
2. ben en fait ça j'avais cherché, j'avais pas trouvé. J'avais réussi à faire l'inverse: recoller des fichiers découpés. Si tu trouves une astuce ça m'intéresse ;-)
EDIT: En cherchant (j'ai pas trouvé), j'ai vu qu'on pouvait recoller les fichier avec copy et des "+" (j'avais utilisé les redirections). malheureusement ce n'est que pour la lecture, on ne peut pas spécifier plusieurs fichiers cible
Ah c'est interessant sa pour recoller les fichiers !!
Mais quel est exactement l'effet produit les 2 fichier réunis sa donne quoi :-?
Merci
avec copy, je sais pas.
moi je faisais TYPE fichier >> fichier_recolle
et ça copie tout même pour des fichiers binaires.
mais copy c'est certainement plus sûr car on peut préciser que le fichier est binaire avec /B.
Oui mais att si tu rassemble 2 fichiers mp3 sa fait quoi ??
Un fichier mp3 avec les 2 chansons qui se suivent ??
Ou un fichier mp3 avec les 2 chasons qui sont jouée en parallèle en clair un remix de fou :-D
Ah et peut etre que j'ai déjà posé cette question mais : comment faire pour compter les lignes d'un fichier texte ?? Et comment faire pour rechercher et effacer un charactère dans une chaine ....
(et si le caractère à supprimer est le premier charactère de la ligne sa aiderais sa cerait pas plus facil ou tout simplement réalisable?)
Bon ça dépend des formats des fichiers. Normalement avec toutes les compressions du type MPEG, ça doit marcher.
Mais c'est surtout utile quand on a coupé un fichier en morceaux pour le recoller :-D
Pour compter, tu peux lire le fichier avec un FOR et mettre un compteur qui fait +1 à chaque ligne.
pour la recherche de début, tu coupe la variable avec %var:~0,10%
après tu reformes ta chaine: set resultat=debut_a_remplacer%var:~10%
et tu enregistres dans un nouveau fichier.
toujours en batch : ya t'il une commande qui permet de lancer le plein ecran ... ?
merci d'avance .
Oui c'est possible :
start /max explorer (cet exemple ca lancera poste de travail en plein ecran)
Voila @+
Oui le truc du "+1" avec un "for" j'y avait pensé mais je voulais savoir si il n y avait pas une méthode moin ... barbare ^^.
je ne comprend pas trop le "%var:~0,10%" traduit sa donne quoi ?? Sa te découpe la chaine de caractère en 10 morceaux ... ?? Si c'est le cas après comment tu isole le premier morceaux ?
Eux ... c'est possible de voir le code binaire d'un fichier grace à un fichier batch biensur :-? ?
Cricky ..... :-(
C'est vrai que pour le for c'est pas terrible, mais je vois rien de mieux.
pour le ~dans le var, c'est décrit dans le help set.
ça coupe une variable en prenant un certain nombre de caractères.
si VAR=azerty
%VAR:~0,3%=aze
%VAR:~0,4%=azer
%VAR:~3,1%=r
Le premier chiffre est l'index où commencer à couper, et le 2ème est le nombre de caractères à prendre à partir de l'index.
qu'entends-tu par voir le fichier binaire ?
EDIT: fait un simple up, des fois, je zappe des messages parce que au bout d'un moment, ils ne sont plus marqués comme non lu ;-)
Bon j'ai pensais à une methode pour couper un fichier mais sa marche pas !! :-(
Le truc c'était de récupéré le code du fichier ligne par ligne et de le copier ligne par ligne ... c'est pour sa que je voulais compter le nombre de ligne : on prend le nombre total de ligne puis on le divise en 3 pour faire 3 partie on dis au batch que lorsqu'il atteint une chaine avec le nombre .... devant il commence une autre partie.
Tout sa est faisble mais le problem est que lorsque je récupère la 1er ligne elle fait plus de 255 charactère et donc le batch ne supporte pas et ferme l'execution ... il faudrait trouver comment découper la chaine en plusieurs parties avant meme de l'avoir récupéré.
Mais je ne suis meme pas sur qu'en récupérant juste le code sa marchera quand meme .... c'est à testé ;-)
oui, le problème se pose surtout pour les fichiers binaires qui risquent de se présenter sur une seule ligne dans tout le fichier.
et tu ne peux pas traiter le fichier carctère par caractère ?
:-o Un fichier binaire c'est sur une seul ligne :-o
Et bien en faite je ne sais pas mais je ne pense pas que l'on puisse traiter caractère par caractère avant d'avoir récupéré toute la ligne ...
C'est justement sa le problem que avant d'avoir récupéré au moin la première ligne on ne peu pas agir dessus. A ma connaissance on peut pas découper une ligne en plusieurs parties pour que chaque partie soit traité séparément avant d'avoir récupéré toute la chaine ....
(mais bon sa c'est à cricky de nous le dire :-D )
un fichier texte et un fichier binaire, c'est la même chose. Dans un fichier texte, le retour à la ligne correcpond à un octet précis.
Dans un fichier qui n'est pas texte comme par exemple un .mp, tu as autant de chance de voir passer un caractère de fin de ligne qu'un autre caractère.
Je ne dis pas qu'il n'y en a pas, mais on ne peut pas prédire s'il y en aura 0, 1, 15, 1000...
La seule chose que je vois qui pourrait marcher c'est de couper un flux de redirection. Avec le MORE, le problème est qu'il rajoute une ligne de texte pour chaque page et qu'il faut attendre la fin pour la redirection.
La seule chose que je vois c'est faire un programme. Alors on peut utiliser DEBUG pour programmer en assembleur ou langage machine, créer un .com temporaire et l'exécuter. Mais bon, à ce niveau, autant faire un vrai programme :-D
Sur la plupart des systèmes, un fichier texte est identique à un fichier binaire, mais pas toujours
http://mapage.noos.fr/emdel/notes.htm#fichiers
héhé si on passe du batch à l'assembleur ..... :-D
Tien je ne connaissais pas cette commande "more" elle à l'air intéressante ..... je vais me pencher dessus pour voir ce qu'on peu faire avec .....
Hum c'est pas très clair l'explication : Affiche les sorties écran par écran ... :-?
en fait à la base le more permet d'afficher n'importe quoi à l'écran page par page:
dir |more
unScript paramètres| more
Par page ..... et une page sa fait combien de ligne ?? Car si on arrive à lui dire d'afficher tant de ligne que l'on redirige vers un fichier alors c'est bon normalement on arrivera à découper notre foichier ....
Up pour cricky :-D
Je suppose qu'un page c'est environ 25 lignes (plutôt 24) puisque le mode texte usuel est 80x25 caractères.
Mais si la ligne dépasse 80 caractères, ça prendra plusieurs lignes donc on pourrait se dire que c'est bien, sauf que la difficulté est de rediriger les pages dans des fichiers différents et de supprimer la ligne qui s'affiche à l'écran (le "--- suite ---" )
hum hum tu pourrais me mettre un exemple d'utilisation de la commande "more" que je voi ce que sa donne car la je suis un peu largué ...... :-?
ça s'utilise comme TYPE qui affiche le contenu d'un fichier:
Code :
|
s'il y a plus de 25 lignes dans toto.txt, ça s'affichera page par page: l'utilisateur doit appuyer sur une touche pour voir la page suivante.
Chez moi sa marche pas ! :-(
J'ai fais exactement "more toto.txt"
dans le fichier toto.txt il y a 49 lignes et chaque ligne porte son nombre exemple :
1
2
3
4
5
etc ....
Et donc chez moi rien ne s'affiche !!
:-o
Up pour Cricky :-D
Ben moi ça marche:
Code :
|
Oula !! attend c'est quoi ce "for" qui apparait ??
c'est juste pour remplir le fichier toto.dat de:
Code :
|
A oué je savais pas que l'on pouvais faire sa !! Comme quoi batch à encore beaucoup de secret !! :-D
Bon donc maintenant mon problem est : ne connaissant pas le nombre de caractère d'une variable si je fait une découpe comme tu m'a montré mais bon comme je ne connais pas le nombre de caractère je vais mettre par exemple : 1000 comme sa je suis sur qu'il n y aura pas de caractère oublié !! Mais si ma variable possède - de 1000 caractère sa fera une erreur ?? :-?
Ah et je voulais savoir si tu n'avais pas une astuce pour créer un nombre de variable par exemple :
Code :
|
je sais pas si tu vois ..... ou plustot esque tu saurais comme au lieu d'effacer une varible on ajoute un caractère.
par exemple un truc du genre :
Code :
|
Tu vois comment je peux faire ?
Merci
Pour la découpe, je sais pas faire, j'ai pas réussit, je pense pas qu'on puisse faire grand chose avec more, puisque si on redirige, ça prend tout le fichier.
Donc, là je sais pas lol
sinon pour les variable c'est facile.
Pour concaténer 2 caractères:
Code :
|
Et pour générer des variable le mieux eest de faire:
Code :
|
Il suffit d'utiliser la variable de la boucle dans le nom de ta nouvelle variable.
Au final tu auras:
Code :
|
Bon voila j'ai toujours des problems :
voici un code :
Code :
|
Dans ce code il y a 2 problem !! Le problem majeur étant que le code ne marche pas !
Ce que je voulais faire c'est récupérer tout les caractère de la chaine 1 à 1 mais ne connaissant pas pas le nombre de caractère ! Donc j'ai essayé de faire avancer de 1 en 1 les caractère à prendre puis de les stocker mais sa ne marche pas :-(
Comment je peux faire ?
Vu que le % est un caractère de contrôle et que l'analyse sémantique du batch est un peu pourrie, je doute que tu puisse faire ça comme ça.
Et je ne vois pas comment tu pourrais faire ça.
Bon au lieu de demander chaque petit truc je vou dit mon little projet. Bon pendant mon temps perdus je m'amuse à créer divers programme (si on peux appeller sa comme sa) et après avoir créer unemultitude de petit script j'essaye de créerun programme qui "crypt" une chaine de caractère !!
Rien de très spécial j'essaye juste de remplacer un caractère "a" par, par exemple "z45x8df35f" le problem est que une fois ayant la chaine à crypter sous une variable je ne sais pas comment la découper caractère par caractère ......... pour remplacer les caractère :-(
Tu en demande trop au batch ;-)
En plus comme on vois le code du barch, ben c'est pas sécurisé du tout, car il suffit de récupérer le programme de cryptage pour décrypter ;-)
lol et oui mais très peu de gens save que batch est compilable :-o
Euhh mais quesque tu dis :-o
lol oui j'ai trouvé un pti logiciel qui transforme mes batch en "exe" et tout est mega crypté enfin c'est compilé quoi. Le seul problem est que mon fichier de 8Ko en "bat" fait 124 en "exe" donc voila quoi .
Mais c'est assez pratique quand meme!
Et oui c'est vrai que batch n'est pas super puissant mais à mon avis tout le monde le sous éstime !! C'est un langage qui grace à sa simplicité devien très puissant lorsque l'on sait comment l'utiliser
le batch en exe, je connais pas je doute que le comportement soit le même (compilé au lieu d'interprété). Et surtout ça n'a rien à voir, seule la syntaxe est la même.
sinon tu peux programmer en assembleur, voire langage machine et utiliser la commande DEBUG pour exécuter ce code.
Mais bon dans les 2 cas, c'est pas vraiment programmer en baatch dans le sens de manipuler des commandes DOS.
ça ne vaut quand même pas le python :-P
Tout le monde me parle de ce python qui est apparement le grand frère de batch !! Esqu'il garde quand meme une partie de la simplicité du batch ??
Un moment je voulais me mettre au python alors tout content je pars à la recherche de commande mais la surprise il faut que je télécharge des logciels .... de plus lors de la recherche de la commande copy rien trouvé :-( donc je suis resté sur mon pti batch dont j'avais encore quelques ressources à exploiter
Bon voici la question du moment :
[b]Comment récupéré chaque caractère 1 à 1 avec batch ?
J'accepte toute les proposition barbare ou non .... :-D
Il y a 230 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
