Utilisation de la commande echo redirigée vers un fichier

Utilisation de la commande echo redirigée vers un fichier - Shell/Batch - Programmation

Marsh Posté le 10-04-2006 à 16:57:38    

Bonjour  
 
J’essaie d’écrire un batch pour générer automatiquement des fichiers .htm  
Le principe est echo lecontenudemapage > monfichier
Le nom du fichier varie avec la variable %i
Le corps du fichier varie avec la même variable
 
Ma commande est :
 
for /L %i in (1,1,800) do echo <html><head></head><body onload='compt=setTimeout("self.close();",15000)'><img style="width: 568px; height: 426px;" alt="" src="mondossier/XXX%i.jpg"></body></html> >E:\monchemin\fichier%i.htm
 
Outre le problème de mise en forme linéaire, mon souci est que echo interprète les < et >
Si je mets des guillemets, cela génère bien les fichiers, mais les guillemets se retrouvent écrits dans mon fichier.
J’ai ce résultat (pour fichier4.htm)
"<"html">""<"head">""<"/head">""<"body onload='compt=setTimeout("self.close();",15000)'">""<"img style="width: 568px; height: 426px;" alt="" src="mondossier/XXX4.jpg"">""<"/body">""<"/html">"  
 
Au lieu du
 
<html><head></head><body onload='compt=setTimeout("self.close();",15000)'><img style="width: 568px; height: 426px;" alt="" src="PhotoTristan/Tristan004.jpg"></body></html>  
 
escompté.
 
Idéalement, je voudrais :
 
<html>
<head>
</head>
<body onload='compt=setTimeout("self.close();",15000)'><img style="width: 568px; height: 426px;" alt="" src="PhotoTristan/Tristan004.jpg">
</body>
</html>  
 
Mais supprimer les guillemets sera déjà pas mal
 
Merci de vote aide
 
 
 
 
 
 

Reply

Marsh Posté le 10-04-2006 à 16:57:38   

Reply

Marsh Posté le 10-04-2006 à 17:19:35    

Si tu as xmllint installé ( ce qui est vraisemblable)

Code :
  1. echo '<img style="width: 568px; height: 426px;" alt="" src="mondossier/XXX%i.jpg">' | xmllint -html --xmlout -format - | sed "s/<body>/<body onload='tonbouzin'>/"

Reply

Marsh Posté le 10-04-2006 à 18:09:26    

Je ne connais pas xmllint. Je l'ai donc "installé"
Dos ne connait pas la commande sed
 
Surtout, j'ai pas tout compris a ta commande, car je ne voit pas en quoi elle générera 800 fichiers htm de contenu et de nom incrémenté.
 
Merci tout de même
 

Reply

Marsh Posté le 10-04-2006 à 19:17:05    

Fais attention aux caractères spéciaux comme < et >. L'invite de commandes risque de les interpréter comme les caractères de redirection.
Par exemple :

Code :
  1. echo ^<hello^>

Reply

Marsh Posté le 10-04-2006 à 19:19:58    

C'est justement là tout mon problème et la raison de mon post ; contourner cette interpretation
 
 

Reply

Marsh Posté le 10-04-2006 à 23:43:17    

Justement, je t'avais donné la solution.

Reply

Marsh Posté le 11-04-2006 à 09:09:30    

jaimiye a écrit :

Je ne connais pas xmllint. Je l'ai donc "installé"
Dos ne connait pas la commande sed
 
Surtout, j'ai pas tout compris a ta commande, car je ne voit pas en quoi elle générera 800 fichiers htm de contenu et de nom incrémenté.
Merci tout de même


Ouppps pardon j'avais pas vu que c'était du dos!!!  
Par contre ma code génère bien ce que tu veux (sous linux) car xmllint te formate tout seul le flux html .
Donc avec la commande:

Code :
  1. echo '<img style="width: 568px; height: 426px;" alt="" src="mondossier/XXX%i.jpg">' | xmllint -html --xmlout -format - | sed "s/<body>/<body onload='tonbouzin'>/"


on obtiens:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
  <body onload='tonbouzin'>
    <img style="width: 568px; height: 426px;" alt="" src="mondossier/XXX%i.jpg"/>
  </body>
</html>


 

Reply

Marsh Posté le 11-04-2006 à 09:50:54    

Alors moi ... je suis trop bête.
Je ne sais pas pourquoi hier soir, en testant ^<hello^> et obtenant <hello>, j'en ai déduit que c'était pas bon. J'avais du mettre le cerveau sur off (en réalité je me rappelle que ma dame me tannait pour que je lui serve de répétiteur à ce moment là).
 
Quoiqu'il en soit, je te remerçie vraiment de ta préçieuse colaboration.
Mais comment le sais tu ? C'est vrai quoi, j'ai cherché deux jours, lu des tonnes de truc. Le ^ je ne l'ai vu nullepart.
 
Petite question subsidiaire : Si je veux que "%i in (1,1,800)" donne 001 002,003, ... 031... 156 .. au lieu de 1,2,3...31... c'est possible ?
 
 

Reply

Marsh Posté le 11-04-2006 à 19:46:03    

jaimiye a écrit :

Petite question subsidiaire : Si je veux que "%i in (1,1,800)" donne 001 002,003, ... 031... 156 .. au lieu de 1,2,3...31... c'est possible ?


Ce n'est pas possible nativement, mais tu peux "décomposer" le for en 3 boucles différents : [1,9], [10,99] et [100-800].
 
Voilou ;)

Reply

Marsh Posté le 22-04-2006 à 16:37:42    

Merci
 
En fait c'est exactement ce que j'avais fait ;-)
 
Je mets ci dessous la version finale si ça peut aider quelqu'un
 
for /L %i in (1,1,9) do echo ^<html^> >E:\monchemin\fichier00%i.htm
for /L %i in (1,1,9) do echo ^<head^> >>E:\monchemin\fichier00%i.htm
for /L %i in (1,1,9) do echo ^<META HTTP-EQUIV="imagetoolbar" CONTENT="no"^>^<title^>adc00%i^</title^> >>E:\monchemin\fichier00%i.htm
for /L %i in (1,1,9) do echo ^</head^> >>E:\monchemin\fichier00%i.htm
for /L %i in (1,1,9) do echo ^<body onload='compt=setTimeout("self.close();",10000)'^> >>E:\monchemin\fichier00%i.htm
for /L %i in (1,1,9) do echo ^<img STYLE="position:absolute; TOP:0px; LEFT:0px;" src="photoadc/adc00%i.jpg"^> >>E:\monchemin\fichier00%i.htm
for /L %i in (1,1,9) do echo ^</body^> >>E:\monchemin\fichier00%i.htm
for /L %i in (1,1,9) do echo ^</html^> >>E:\monchemin\fichier00%i.htm
 
for /L %i in (10,1,99) do echo ^<html^> >E:\monchemin\fichier0%i.htm
for /L %i in (10,1,99) do echo ^<head^> >>E:\monchemin\fichier0%i.htm
for /L %i in (10,1,99) do echo ^<META HTTP-EQUIV="imagetoolbar" CONTENT="no"^>^<title^>adc0%i^</title^> >>E:\monchemin\fichier0%i.htm
for /L %i in (10,1,99) do echo ^</head^> >>E:\monchemin\fichier0%i.htm
for /L %i in (10,1,99) do echo ^<body onload='compt=setTimeout("self.close();",10000)'^> >>E:\monchemin\fichier0%i.htm
for /L %i in (10,1,99) do echo ^<img STYLE="position:absolute; TOP:0px; LEFT:0px;" src="photoadc/adc0%i.jpg"^> >>E:\monchemin\fichier0%i.htm
for /L %i in (10,1,99) do echo ^</body^> >>E:\monchemin\fichier0%i.htm
for /L %i in (10,1,99) do echo ^</html^> >>E:\monchemin\fichier0%i.htm
 
for /L %i in (100,1,433) do echo ^<html^> >E:\monchemin\fichier%i.htm
for /L %i in (100,1,433) do echo ^<head^> >>E:\monchemin\fichier%i.htm
for /L %i in (100,1,433) do echo ^<META HTTP-EQUIV="imagetoolbar" CONTENT="no"^>^<title^>adc%i^</title^> >>E:\monchemin\fichier%i.htm
for /L %i in (100,1,433) do echo ^</head^> >>E:\monchemin\fichier%i.htm
for /L %i in (100,1,433) do echo ^<body onload='compt=setTimeout("self.close();",10000)'^> >>E:\monchemin\fichier%i.htm
for /L %i in (100,1,433) do echo ^<img STYLE="position:absolute; TOP:0px; LEFT:0px;" src="photoadc/adc%i.jpg"^> >>E:\monchemin\fichier%i.htm
for /L %i in (100,1,433) do echo ^</body^> >>E:\monchemin\fichier%i.htm
for /L %i in (100,1,433) do echo ^</html^> >>E:\monchemin\fichier%i.htm
 
(finalement je n'avais besoin que de 433 pages)
 

Reply

Marsh Posté le 22-04-2006 à 16:37:42   

Reply

Marsh Posté le 22-04-2006 à 16:54:49    

Au fait, tu peux combiner tes boucles for pour le même intervalle d'indice de cette manière :

Code :
  1. for /l %i in (...) do (
  2.   echo blabla
  3.   echo blibli
  4. )

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed