Einträge per Batch aus Datei löschen
morgen allerseits,
Ich habe hier eine Datei die mehr als 4000 SMTPRoutes enthält.
Formatbeispiele:
Domain:IP
Domain:Hostname
.Domain:Hostname
Zwischen drin sind allerdings auch immer wieder Kommentare.
Formatbeispiel:
#Domain:Hostname
#(Lehrzeichen)bla bla
Ich würde gerne die Datei per Batch so bearbeiten (oder neu erstellen) das er mir alle Sachen die hinter dem Domainnamen stehen (also alles andere in der Zeile inklusive den : ) rauswirft oder die Sachen vor dem : in eine neue Datei schreibt.
Zusätzlich sollen auch die Kommentare (die jeweils mit einem # beginnen) entfert werden.
Da das ganz voraussichtlich jeden Monat neu gemacht werden muss will ich es niemanden zumuten das jedes Mal von Hand zu machen.
Ich würde mich über eure Hilfe freuen.
mfg
David
/edit:
Beispiele:
Ursprungsdatei:
Datei nach bearbeitung:
Ich habe hier eine Datei die mehr als 4000 SMTPRoutes enthält.
Formatbeispiele:
Domain:IP
Domain:Hostname
.Domain:Hostname
Zwischen drin sind allerdings auch immer wieder Kommentare.
Formatbeispiel:
#Domain:Hostname
#(Lehrzeichen)bla bla
Ich würde gerne die Datei per Batch so bearbeiten (oder neu erstellen) das er mir alle Sachen die hinter dem Domainnamen stehen (also alles andere in der Zeile inklusive den : ) rauswirft oder die Sachen vor dem : in eine neue Datei schreibt.
Zusätzlich sollen auch die Kommentare (die jeweils mit einem # beginnen) entfert werden.
Da das ganz voraussichtlich jeden Monat neu gemacht werden muss will ich es niemanden zumuten das jedes Mal von Hand zu machen.
Ich würde mich über eure Hilfe freuen.
mfg
David
/edit:
Beispiele:
Ursprungsdatei:
archaeologie-xxx.de:15.62.xxx.xxx
landesmuseum-xxx.de:10.18.xxx.xxx
# Mai 2005
museum-xxx.de:10.30.xxx.xxx
# land-xxx.de 2009013001
Datei nach bearbeitung:
archaeologie-xxx.de
landesmuseum-xxx.de
museum-xxx.de
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 144014
Url: https://administrator.de/contentid/144014
Ausgedruckt am: 21.11.2024 um 22:11 Uhr
11 Kommentare
Neuester Kommentar
Hallo!
Versuch mal folgendes - ist zwar kein batch, aber sollte auch das machen, was Du willst:
(ist ungetestet, bitte zuerst an einer Sicherungskopie deiner Datei ausprobieren...)
Speichern unter *umbau.vbs*
Hoffe, das hilft Dir weiter
lg
Versuch mal folgendes - ist zwar kein batch, aber sollte auch das machen, was Du willst:
(ist ungetestet, bitte zuerst an einer Sicherungskopie deiner Datei ausprobieren...)
Speichern unter *umbau.vbs*
datei= "lindenbaum.txt"
Set fs = CreateObject("Scripting.FileSystemObject")
Set File = fs.OpenTextFile(datei , 1, true)
Do While not file.AtEndOfStream
zeile = (file.ReadLine)
doppelpunkt = instr(zeile,":")
if doppelpunkt >= 1 then
zeile = left(zeile, doppelpunkt-1) & vbCrLf
end if
raute = instr(zeile,"#")
if raute >= 1 then
zeile = ""
end if
inhaltneu = inhaltneu & zeile
Loop
Set File = nothing
set dateineu = fs.createtextfile(datei, true)
dateineu.write inhaltneu
Set dateineu = nothing
Hoffe, das hilft Dir weiter
lg
Hallo!
Hab den "Fehler" bereits oben im Code ausgessert, bitte nochmal testen - Leerzeilen sollten nun keine mehr entstehen...
Zur kurzen Erklärung (muss wieder in den Unterricht zurück - es fällt relativ schnell auf, wenn der Lehrer weg ist
instr(WoWirdGesucht, WasWirdGesucht) liefert die Stelle, an der das gesuchte Zeichen/die Zeichenkette zum ersten mal vorkommt.
ergo: wenn 0, dann kommt das Zeichen gar nicht vor
Pseudocodemaessig also:
bis zeile 6 --> datei wird geöffnet
7 - zeile wird eingelesen
8 variable doppelpunkt sucht :
9 wenn er vorkommt wird in
10 variable zeile = von links beginnend bis zum doppelpunkt (exklusive diesem selbst)
13 gleiches wie beim doppelpunkt mit der #
15 wenn # vorkommt wird die zeile gelöscht
21 datei schliessen
24 datei neu anlegen
lg
Edi
Hab den "Fehler" bereits oben im Code ausgessert, bitte nochmal testen - Leerzeilen sollten nun keine mehr entstehen...
Zur kurzen Erklärung (muss wieder in den Unterricht zurück - es fällt relativ schnell auf, wenn der Lehrer weg ist
instr(WoWirdGesucht, WasWirdGesucht) liefert die Stelle, an der das gesuchte Zeichen/die Zeichenkette zum ersten mal vorkommt.
ergo: wenn 0, dann kommt das Zeichen gar nicht vor
Pseudocodemaessig also:
bis zeile 6 --> datei wird geöffnet
7 - zeile wird eingelesen
8 variable doppelpunkt sucht :
9 wenn er vorkommt wird in
10 variable zeile = von links beginnend bis zum doppelpunkt (exklusive diesem selbst)
13 gleiches wie beim doppelpunkt mit der #
15 wenn # vorkommt wird die zeile gelöscht
21 datei schliessen
24 datei neu anlegen
lg
Edi
@ dave114: sorry, in der vorletzten Zeile war das "neu" verschluckt worden - im code oben bereits ausgebessert
@ pieh-ejdsch: so gehts natürlich auch
Nun meine Bitte an Dich: könntest du so nett sein, und den Code für uns kommentieren?
ich blick da leider nicht durch...
lg
/edit: hab ich oben überlesen: bin studierter Betriebswirt und Lehrer für selbiges und Wirtschaftsinformatik
Die SchülerInnen haben grad eine Arbeitsaufgabe und obwohl sie ja sehr sympatisch sind, ist es doch zu laaangweilig, ihnen beim Nachdenken zuzusehen...
@ pieh-ejdsch: so gehts natürlich auch
Nun meine Bitte an Dich: könntest du so nett sein, und den Code für uns kommentieren?
ich blick da leider nicht durch...
lg
/edit: hab ich oben überlesen: bin studierter Betriebswirt und Lehrer für selbiges und Wirtschaftsinformatik
Die SchülerInnen haben grad eine Arbeitsaufgabe und obwohl sie ja sehr sympatisch sind, ist es doch zu laaangweilig, ihnen beim Nachdenken zuzusehen...
Gerne
FOR /F "Delims=:" %i in ('Befehl') do Anweisung %i
- gib mir die Ausgabe bis vor dem "Trennzeichen=:" als %Variable der in (Klammern stehenden Datei oder der "Zeichenfolge" oder des 'Befehles') Zeilen weise in %Variable aus
ECHO %Variable>>"Datei"
- gib %Variable in das CMDfenster aus
- Leite das ganze fortlaufend jeweils eine Neue Zeile in die "Datei" um
findstr /v ^# "D:\Original.txt"
- Durchsuche die Datei "D:\Original.txt" und gib [/V] NICHT die Zeilen welche [^] am Zeilenanfang ein [#] enthalten aus. Also nur die anderen Zeilen.
[Edit]um diese Zeile in einen *.CMD oder *.BAT zu starten müssen die FOR Variablen mit doppelt vorangestellten Prozentzeichen dargestellt werden.
also %%i
[/Edit]
FOR /F "Delims=:" %i in ('Befehl') do Anweisung %i
- gib mir die Ausgabe bis vor dem "Trennzeichen=:" als %Variable der in (Klammern stehenden Datei oder der "Zeichenfolge" oder des 'Befehles') Zeilen weise in %Variable aus
ECHO %Variable>>"Datei"
- gib %Variable in das CMDfenster aus
"Datei"
findstr /v ^# "D:\Original.txt"
- Durchsuche die Datei "D:\Original.txt" und gib [/V] NICHT die Zeilen welche [^] am Zeilenanfang ein [#] enthalten aus. Also nur die anderen Zeilen.
[Edit]um diese Zeile in einen *.CMD oder *.BAT zu starten müssen die FOR Variablen mit doppelt vorangestellten Prozentzeichen dargestellt werden.
also %%i
[/Edit]
Super erklärt!
Vielen Dank!!!
lg
@dave114
Ich glaube mich aus einer Vielzahl ähnlicher Vorfälle (ich tippe 10 Zeilen vbs, jemand kommt dann mit 1 Zeile daher ) daran zu erinnern, dass für eine batch-Datei folgendes gilt:
% wird zu %%
Vielen Dank!!!
lg
@dave114
Ich glaube mich aus einer Vielzahl ähnlicher Vorfälle (ich tippe 10 Zeilen vbs, jemand kommt dann mit 1 Zeile daher ) daran zu erinnern, dass für eine batch-Datei folgendes gilt:
% wird zu %%