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
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
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
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
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
@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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 139776
Url: https://administrator.de/contentid/139776
Ausgedruckt am: 25.11.2024 um 13:11 Uhr
13 Kommentare
Neuester Kommentar
Hallo ibase007 und willkommen im Forum!
Mit Batch alleine wäre das etwas mühsam - mit ein wenig integriertem VBS geht's besser:
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 ... [/Edi]
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
Grüße
bastla
[Edit] | @AndreasBrecht: Da wären wir uns ja weitgehend einig ... [/Edi]
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
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
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""/>"
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
Hallo ibase007, Hallo bastla!
Alternativ, hätte man bei Html-Code auch die Scheibform mit einfachen Hochkommas verwenden können, z.B.:
Gruß Dieter
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
Hallo ibase007!
Damit der eingefügte Text die erste Zeile für sich alleine hat, müsstest Du nur als Ersatz der ursprünglichen Zeile 8
verwenden.
Grüße
bastla
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)
Grüße
bastla
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.
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.
Hallo ibase007 und lefgruen!
ändern (wobei ich allerdings unter XP SP3 das Problem nicht nachvollziehen konnte).
Grüße
bastla
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 ... 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)
Grüße
bastla