ibase007
Goto Top

In mehrere Textfiles per Batch Wert einfügen ?

absoluter beginner ...

Hallo zusammen,


ich möchte in der ersten Zeile einer Textdatei etwas einfügen :
Bsp.: <HALLO HALLO bitte beachten>

nun ist es so das es knapp 600 Dateien sind.
aber Händisch doch auch zimlich aufwändig ist face-sad

ich habe hier im Forum schon sehr viel gesucht und auch etwas gefunden :
In mehrere Textfiles per Batch Wert einfügen
das ist eigentlich meine Lösung face-smile

@echo off & setlocal 
for %%i in ("%~dp0*.txt") do (   
	echo\ 
	echo M99 
)>>"%%~i"  

ABER, wie kann ich es machen, dass mein Wert am Anfang von Textdokument eingefügt wird ?
UND, ist es auch möglich gegen zu prüfen ob der wert schon vorhanden ist ?

viele Grüße und vielen Dank
Ibase

Content-ID: 139776

Url: https://administrator.de/contentid/139776

Ausgedruckt am: 25.11.2024 um 13:11 Uhr

AndreasBrecht
AndreasBrecht 02.04.2010 um 18:57:57 Uhr
Goto Top
Falls vbscript für Dich in Frage kommt:
Datei als Textstream öffnen, mit ReadAll einlesen, den Text an den Anfang des Gelesenen hängen und alles mit write zurückschreiben.
bastla
bastla 02.04.2010 um 19:12:09 Uhr
Goto Top
Hallo ibase007 und willkommen im Forum!

Mit Batch alleine wäre das etwas mühsam - mit ein wenig integriertem VBS geht's besser:
@echo off & setlocal
set "Ordner=D:\Dein Testordner"  
set "Typ=txt"  
set "Text=<HALLO HALLO bitte beachten>"  

set A=%temp%\AddText.vbs
> %A% echo Set fso=CreateObject("Scripting.FileSystemObject"):Set A=WScript.Arguments:D=A(0):T=A(1)  
>>%A% echo I=Split(fso.OpenTextFile(D).ReadAll,vbCrLF):If InStr(I(0),T)=0 Then fso.CreateTextFile(D).Write T^&Join(I,vbCrLf)
pushd "%Ordner%"  
for /f "delims=" %%i in ('dir /b *.%Typ%') do cscript //nologo %A% "%%i" "%Text%"  
popd
Bitte zuerst nur einige Testdateien verwenden, da (ohne Ersetllung einer Sicherungskopie) die Dateien unmittelbar verändert werden.

Grüße
bastla

[Edit] | @AndreasBrecht: Da wären wir uns ja weitgehend einig ... face-wink [/Edi]
ibase007
ibase007 02.04.2010 um 19:48:42 Uhr
Goto Top
hallo Ihr Zwei,

also ich bin gerade sehr sprachlos, wie selbstvertsändlich das für euch beide ist ... wenn ich das auch selbst nur so könnte ...
und vor allem so schnell !
Habe es gerade getestet es funktioniert ! HAMMER ! bin echt sprachlos und begeistert.

nur eine Frage habe ich gerade noch, wie sieht dann die Formatierung aus
wenn nun der Inhalt ungefähr so ausschaut :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

dann macht das Script daraus :
<meta http-equiv=Content-Type content=text/html;


VIELEN DANK NOCH MAL FÜR DIE SO SCHNELLE & KOMPETENTE HILFE bastla !!!
bastla
bastla 02.04.2010 um 19:57:57 Uhr
Goto Top
Hallo ibase007!

Die enthaltenen Anführungszeichen machen es für die "Batch-Hülle" noch etwas schwieriger - mit einer etwas unmittelbareren Schreibweise sollte sich das aber auch lösen lassen:
Ersetze dazu die Zeile 7 durch
> %A% echo Set fso=CreateObject("Scripting.FileSystemObject"):Set A=WScript.Arguments:D=A(0):T="<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8""/>"
Die Zeile 4 wird danach nicht mehr benötigt, und in der Zeile 10 entfällt dann das "%Text%" am Ende.

Als Hinweis für ev Änderungen des einzufügenden Textes (in der neuen Zeile 7): Wenn ein Anführungszeichen als Text behandelt werden soll, muss es verdoppelt werden ...

Grüße
bastla
ibase007
ibase007 02.04.2010 um 20:03:27 Uhr
Goto Top
ich bin Sprachlos !
Wirklich alle Achtung vor Deinem können !!!
VIELEN DANK !
76109
76109 02.04.2010 um 20:36:58 Uhr
Goto Top
Hallo ibase007, Hallo bastla!

Alternativ, hätte man bei Html-Code auch die Scheibform mit einfachen Hochkommas verwenden können, z.B.:
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>

Gruß Dieter
ibase007
ibase007 02.04.2010 um 20:44:10 Uhr
Goto Top
ok, da war ich mir nicht sicher ob man das gleichstellen kann.
das hatte ich auch schon getestet.
aber ist schon klasse was man sich da arbeit sparen kann face-smile

jetzt bin ich schon fast fertig face-smile muss dann nur noch mit "Suchen und ersetzen" ein Zeilenumbruch einbauen.

Wo kann man sich da eigentlich in die VB Scripts etwas einlesen ?
bastla
bastla 02.04.2010 um 20:51:29 Uhr
Goto Top
Hallo ibase007!
muss dann nur noch mit "Suchen und ersetzen" ein Zeilenumbruch einbauen.
Wenn Du nicht oben geschrieben hättest "in der ersten Zeile einer Textdatei etwas einfügen" wäre es auch ohne VBScript relativ einfach gegangen ...

Damit der eingefügte Text die erste Zeile für sich alleine hat, müsstest Du nur als Ersatz der ursprünglichen Zeile 8
>>%A% echo I=Split(fso.OpenTextFile(D).ReadAll,vbCrLF):If InStr(I(0),T)=0 Then fso.CreateTextFile(D).Write T^&vbCrLf^&Join(I,vbCrLf)
verwenden.

Grüße
bastla
lefgruen
lefgruen 02.04.2010 um 20:59:59 Uhr
Goto Top
Hallo,

der Kommandointerpreter kann afik keine Streams, man kann sich aber mit einigen Tricks behelfen. Einen bietet der Copybefehl, der kann Textdateien aneinander hängen.

echo Zeile 1 in Datei 1 > c:\Datei1.txt
echo Zeile 1 in Datei 2 > c:\Datei2.txt

copy c:\Datei1.txt + c:\Datei2.txt c:\Datei3.txt
pause

Falls man einer existierenden datei2.txt eine Zeile voranstellen möchte, dann erzeuge man eine Datei1.txt mit dem gewünschten Inhalt und kopiere die beiden Dateien zu einer Datei3.txt.
ibase007
ibase007 02.04.2010 um 21:05:10 Uhr
Goto Top
toll! Danke!

ich habe wirklich viel gesucht ! aber lange das nicht erreicht was ich hier in den Beiträgen lese!


Ok eine Sache habe ich noch face-smile

warum wird dann das Originalformat also die Formatierung des Textes nicht erhalten ?

zum Beispiel sind Wörter mit Apostroph enthalten

So wird dann aus :
través de la idílica

das hier :
trav�s de la id�lica
(Also so ein komisches 4 Eck)
ibase007
ibase007 02.04.2010 um 21:10:22 Uhr
Goto Top
Ok eine Sache habe ich noch face-smile

warum wird dann das Originalformat also die Formatierung des Textes nicht erhalten ?

zum Beispiel sind Wörter mit Apostroph enthalten

So wird dann aus :
través de la idílica

das hier :
trav�s de la id�lica
(Also so ein komisches 4 Eck)
bastla
bastla 02.04.2010 um 21:42:44 Uhr
Goto Top
Hallo ibase007 und lefgruen!
Falls man einer existierenden datei2.txt eine Zeile voranstellen möchte, dann erzeuge man eine Datei1.txt mit dem gewünschten Inhalt und kopiere die beiden Dateien zu einer Datei3.txt.
Das (oder ein simples "type ... >>") wäre auch mein Ansatz gewesen ... face-smile
warum wird dann das Originalformat also die Formatierung des Textes nicht erhalten ?
Könnte daran liegen, dass die Dateien Unicode-Format haben - dann würde sich die Zeile 8 nochmals auf
>>%A% echo I=Split(fso.OpenTextFile(D,1,False,True).ReadAll,vbCrLF):If InStr(I(0),T)=0 Then fso.CreateTextFile(D,True,True).Write T^&vbCrLf^&Join(I,vbCrLf)
ändern (wobei ich allerdings unter XP SP3 das Problem nicht nachvollziehen konnte).

Grüße
bastla
ibase007
ibase007 02.04.2010 um 22:08:43 Uhr
Goto Top
ok jetzt wurde das daraus :D
auch nicht übel :D

㰀戀爀 ⼀㸀☀渀戀猀瀀㬀☀渀戀猀瀀㬀☀渀戀猀瀀㬀☀渀戀猀瀀㬀☀渀戀猀瀀㬀ഀഀ