Jump to content

*.rtf Dateien via Batch erzeugen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hi zusammen,

 

ich habe gerade ein kleines Batch Problem. Ich würde gerne eine Batch Datei schreiben (bzw. final über eine WebApplikation erzeugen) welche mir mehrere *.rtf Dokumente erstellt.

 

Wenn ich nun aber hingehe und den "code" eines rtf's in eine Batch copiere und diese Anweise mit:

copy "[rtf_code]" > rtf_date.rtf

dann wird jeder Zeilenumbruch im rtf auch in der Batch als solcher interpretiert. Kann ich das irgendwie escapen?

 

Danke

Link zu diesem Kommentar
Hi

mir ist nicht ganz klar was du da vorhast.

Du erstellst eine .RTF wie? die soll dann wohin / was machen?

Binäry Copy mit /b - aber warum nicht mit VBS etc scripten?

 

Hi,

 

:D ok dachte ich mir.

 

Also folgendes. Ich habe eine Webanwendung die u. U. ein Script (batch) erstellt, die nach dem Ausführen, einen bestimmten Verzeichnisbaum anlegt. In jeden dieser Ordner muss ich aktuell ein Word Dokument legen (von Hand) das eine Art Inhaltsverzeichnis darstellt. Da ich von Haus aus faul bin würde ich die Templates dieser Word Dateien gerne direkt in die Ordner legen lassen. Da ich jedoch nur eine Datei als Ausgabe aus der WebAppl haben kann / will bleibt mir nichts anderes übrig als den Inhalt dieser Templates (die für jedes Verzeichnis etwas anderst aussehen) direkt in die Batch zu schreiben.

 

Hoffe, man kanns jetzt verstehen. VBS bin ich kein so Held drin - habe mir zwar ein Buch dazu gekauft aber viel mehr auch noch nicht ;).

 

Gruß

Link zu diesem Kommentar

Hallo,

 

so ganz habe ich das noch nicht verstanden, aber folgendes:

 

wenn diese Batch einen Verzeichnisbaum erstellt, so benötigst Du das Haupverzeichnis und bekommst dann mit

 

dir /s /b Haupverzeichnis

 

das Hauptverzeichnis samt aller Sub- und Subsubverzeichnisse geliefert.

 

Wenn der Inhalt den Du in die .rtf-Dateien schreiben willst immer gleich ist, ist das einfach zu machen mit

 

for /ff "tokens=*" %%i in ('dir /s /b Hauptverzeichnis') do echo %rtf_code% >> rtf_date.rtf

 

Ist die Situation eine andere, mußt Du weitere Infos liefern.

 

Übrigens, in eine Datei schreibt man nicht mit "copy" sondern mit "echo", mit copy werden Dateien kopiert.

 

MfG maneich

Link zu diesem Kommentar

Hi,

 

hmm ok die Ausführungen scheinen zu komplex zu sein. Also mal noch ein vereinfachtes Beispiel.

 

Ich habe eine *.rtf Datei diese öffne ich mit einem Texteditor meiner wahl und kopiere den "quellcode" des *.rtf's raus. Nun will ich, dass eine batchdatei dieses *.rtf mit meinem aus dem Texteditor kopierten Inhalt wieder erstellt und sagen wir mal in c:\ legt.

 

Gruß

Link zu diesem Kommentar

ok und um das ganze vielleicht noch deutlicher zu machen. Ich brauche einen Befehl um z. B. die nachfolgendes Zeilen in eine neu zu erstellende *.rtf Datei zu schreiben.

 

{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang2057\deflangfe2057{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
{\f37\froman\fcharset238\fprq2 Times New Roman CE;}{\f38\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f40\froman\fcharset161\fprq2 Times New Roman Greek;}{\f41\froman\fcharset162\fprq2 Times New Roman Tur;}
{\f42\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f43\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f44\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f45\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\f47\fswiss\fcharset238\fprq2 Arial CE;}{\f48\fswiss\fcharset204\fprq2 Arial Cyr;}{\f50\fswiss\fcharset161\fprq2 Arial Greek;}{\f51\fswiss\fcharset162\fprq2 Arial Tur;}{\f52\fswiss\fcharset177\fprq2 Arial (Hebrew);}
{\f53\fswiss\fcharset178\fprq2 Arial (Arabic);}{\f54\fswiss\fcharset186\fprq2 Arial Baltic;}{\f55\fswiss\fcharset163\fprq2 Arial (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;
\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;
\red192\green192\blue192;}{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \f1\fs24\lang1031\langfe2057\cgrid\langnp1031\langfenp2057 \snext0 Normal;}{\*\cs10 \additive \ssemihidden Default Paragraph Font;}{\*
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv 
\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}}{\*\rsidtbl \rsid2043872\rsid3111569\rsid4868793\rsid15813098}
{\*\generator Microsoft Word 10.0.6612;}{\info{\title ###test###}{\author Max Mustermann}{\operator Max Mustermann}{\creatim\yr2005\mo11\dy25\hr14\min46}{\revtim\yr2005\mo11\dy25\hr14\min47}{\version1}{\edmins0}{\nofpages1}{\nofwords1}{\nofchars10}
{\*\company Muster AG}{\nofcharsws10}{\vern16389}}\paperw11906\paperh16838\margl1417\margr1417\margt1417\margb1134 \widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace120\dgvspace180
\dghorigin1417\dgvorigin1417\dghshow2\dgvshow2\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct
\asianbrkrule\rsidroot15813098 \fet0\sectd \psz9\linex0\headery709\footery709\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid3111569\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2
\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6
\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang 
{\pntxtb (}{\pntxta )}}\pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \f1\fs24\lang1031\langfe2057\cgrid\langnp1031\langfenp2057 {\insrsid2043872 ###test###}{\insrsid4868793 
\par }}

Link zu diesem Kommentar

Hallo,

 

so einfach wie Du dir das denkst, ist das nicht.

 

Du kannst nicht mit irgendeinem Editor eine Worddatei öffnen, den Quellcode auslesen, diesen in eine andere Worddatei schreiben und glauben, daß hier dann das gleiche steht, wie in der ersten Datei. Da steht dann nur der Quellcode drinn.

 

Dies ist kein Html, wo Du auf dem von Dir beschriebenen Weg hinterher wieder die gleiche Datei wie die ursprüngliche hast.

 

Die Sache ist eigentlich nicht komplex, sodern sehr einfach. Nur die Sache ist halt die, daß Du mit völlig falschen Vorstellungen hier dran gehst.

 

Du hast eine rtf-Datei, warum kopierst Du diese nicht einfach nach C:

 

Willst du diese Datei insgesamt evtl. auch mit geänderten Namen in andere Verzeichnisse kopieren, geht das mit einer Batch. Willst Du nurTeile aus dieser Datei in andere neue .rtf-Dateien übertragen, benötigst Du mindests VBS oder höhere Scriptsprachen.

 

Da ich jedoch nur eine Datei als Ausgabe aus der WebAppl haben kann / will bleibt mir nichts anderes übrig als den Inhalt dieser Templates (die für jedes Verzeichnis etwas anderst aussehen) direkt in die Batch zu schreiben.

 

Welche Veränderungen in den einzelnen Vorlagen? Stehen diese in der Ursprungsdatei oder mußt Du diese dazufügen?

 

Vielleich reden wir auch nur an einander vorbei. was Du hier anzeigst ist eigentlich kein Queltext, sondern stellen die div. Eigenschaften der Dokuments dar und die übernimmst du automatisch mit dem kopieren z.B. nach C:.

 

MfG maneich

Link zu diesem Kommentar

Hi,

 

in einem RTF Dokument werden nur ASCII printable characters interpretiert, also Zeichen von 32 bis 126.

Ein einfaches Dokument kann in einer Batch, mit gleichem Ergebnis, unterschiedlich erstellt werden.

 

echo {\rtf Ein Hallo\par an alle {\b mcseboard} mitglieder.\par }>c:\doc.rtf

echo {\rtf >c:\doc.rtf
echo Ein Hallo\par >>c:\doc.rtf
echo an alle {\b mcseboard} mitglieder.\par >>c:\doc.rtf
echo }>>c:\doc.rtf

Aus dem Beispiel oben kann ich schreiben:

echo {\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang2057\deflangfe2057>c:\doc.rtf
echo {\fonttbl>>c:\doc.rtf
echo {\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}>>c:\doc.rtf
echo {\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}>>c:\doc.rtf
echo {\f37\froman\fcharset238\fprq2 Times New Roman CE;}>>c:\doc.rtf
...
echo {\f53\fswiss\fcharset178\fprq2 Arial (Arabic);}>>c:\doc.rtf
echo {\f54\fswiss\fcharset186\fprq2 Arial Baltic;}>>c:\doc.rtf
echo {\f55\fswiss\fcharset163\fprq2 Arial (Vietnamese);}>>c:\doc.rtf
echo }>>c:\doc.rtf
... usw

Den Color Table kann ich zerlegen

echo {\colortbl;>>c:\doc.rtf
echo \red0\green0\blue0;>>c:\doc.rtf
echo \red0\green0\blue255;>>c:\doc.rtf
echo \red0\green255\blue255;>>c:\doc.rtf
...
echo \red192\green192\blue192;}>>c:\doc.rtf

oder als eine Zeile schreiben, es macht keinen Unterschied

echo {\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;...\red192\green192\blue192;}>>c:\doc.rtf

 

Wichtig ist nur das keine Control Words getrennt werden. Sowas geht eher nicht:

echo {\colo>>c:\doc.rtf
echo rtbl;>>c:\doc.rtf

thorgood

Link zu diesem Kommentar
Hi,

 

in einem RTF Dokument werden nur ASCII printable characters interpretiert, also Zeichen von 32 bis 126.

Ein einfaches Dokument kann in einer Batch, mit gleichem Ergebnis, unterschiedlich erstellt werden.

 

echo {\rtf Ein Hallo\par an alle {\b mcseboard} mitglieder.\par }>c:\doc.rtf

echo {\rtf >c:\doc.rtf
echo Ein Hallo\par >>c:\doc.rtf
echo an alle {\b mcseboard} mitglieder.\par >>c:\doc.rtf
echo }>>c:\doc.rtf

Aus dem Beispiel oben kann ich schreiben:

echo {\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang2057\deflangfe2057>c:\doc.rtf
echo {\fonttbl>>c:\doc.rtf
echo {\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}>>c:\doc.rtf
echo {\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}>>c:\doc.rtf
echo {\f37\froman\fcharset238\fprq2 Times New Roman CE;}>>c:\doc.rtf
...
echo {\f53\fswiss\fcharset178\fprq2 Arial (Arabic);}>>c:\doc.rtf
echo {\f54\fswiss\fcharset186\fprq2 Arial Baltic;}>>c:\doc.rtf
echo {\f55\fswiss\fcharset163\fprq2 Arial (Vietnamese);}>>c:\doc.rtf
echo }>>c:\doc.rtf
... usw

Den Color Table kann ich zerlegen

echo {\colortbl;>>c:\doc.rtf
echo \red0\green0\blue0;>>c:\doc.rtf
echo \red0\green0\blue255;>>c:\doc.rtf
echo \red0\green255\blue255;>>c:\doc.rtf
...
echo \red192\green192\blue192;}>>c:\doc.rtf

oder als eine Zeile schreiben, es macht keinen Unterschied

echo {\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;...\red192\green192\blue192;}>>c:\doc.rtf

 

Wichtig ist nur das keine Control Words getrennt werden. Sowas geht eher nicht:

echo {\colo>>c:\doc.rtf
echo rtbl;>>c:\doc.rtf

thorgood

 

danke! Damit kann ich arbeiten! Werde das am Montag mal einbauen!

 

Gruß

Link zu diesem Kommentar
  • 6 Monate später...

Hi,

 

ok die o. g. Batcherzeugung funktioniert zwischenzeitlich prima. Daher möchte ich nun gerne ein weiteres Modul anhängen. Dabei komme ich aber schon wieder an meine Grenzen. *heul*

 

Das neue rtf enthält sehr viel Bilder. Wandle ich das template (word) in ein rtf um dann hat diese Datei 17,5 MB - was zwangsläufig bei der Erzeugung durch den Webserver zu einem timeout führt. Bevor ich das ganze nun via cronjob erzeugen lasse habe ich mir überlegt, ob es in batch files möglich ist codeteile "nachzuladen".

 

Ich habe mir das so vorgestellt. Ich schneide die Binärdaten der Bilder aus meinem rtf raus und lege diese Daten auf einem Netzlaufwerk ab. Die Batch die die rtf's erzeugt lädt diese binärdaten dann an der richtigen stelle nach. Geht sowas mit batchfiles?

 

Gruß

Link zu diesem Kommentar

Hi Johannes,

 

ob es geht Binärteile auszulagern und nachzuladen bin ich überfragt.

 

Verlinkungen gehen. Um beim Beispiel zu bleiben

 

echo {\rtf >c:\doc.rtf
echo Ein Hallo\par >>c:\doc.rtf
echo {\field{\*\fldinst { INCLUDEPICTURE "bild.jpg" \\* MERGEFORMAT \\d }}}\par >>c:\doc.rtf
echo an alle {\b mcseboard} mitglieder.\par >>c:\doc.rtf
echo }>>c:\doc.rtf

 

sollte das Bild aus dem Ursprungsverzeichnis des RTF Dokumentes nachladen.

 

HTML und FTP Links gehen auch

INCLUDEPICTURE "http://irgendwo.tld/bild.jpg"

INCLUDEPICTURE "ftp://irgendwo.tld/bild.jpg"

 

Gruß Thoralf

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...