Batch bei bestimmten Wörtern jeweilige Zeile entfernen
Hallo an Alle,
ich bin mal wieder einer derjenigen, die einfach keine
Ahnung haben und Alles haben wollen
Habe zwar bereits div. Skripte (Batches), dennoch sind
diese alle aus dem Internet kopiert und laufen nicht.
Mein Betriebssystem: Windows Server 2012
Meine benötigte Batchdatei, wie in der Überschrift
bereits angegeben.
Es sollen mehrere txt Dateien ausgelesen werden und diese
überschreiben werden. Es soll in allen Dateien
(unterschiedliche Anzahl an Zeilen, ändert sich
stündlich) nach bestimmten Wörtern gesucht werden. Sofern
diese Wörter vorhanden sind, soll bei jedem dieser Wörter
die jeweilige Zeile entfernt werden (keine Leerzeilen).
Die txt Dateie zu auslesen sind "einfache Listen" mit
Tabs zwischen den Wörtern/ Zahlen/ Zeichen.
Leider funktioniert bisher keine Batchdatei, von denen,
die ich zugegebenermaßen kopiert habe.
Wer ist so lieb und hilft mir?
LG Markus
ich bin mal wieder einer derjenigen, die einfach keine
Ahnung haben und Alles haben wollen
Habe zwar bereits div. Skripte (Batches), dennoch sind
diese alle aus dem Internet kopiert und laufen nicht.
Mein Betriebssystem: Windows Server 2012
Meine benötigte Batchdatei, wie in der Überschrift
bereits angegeben.
Es sollen mehrere txt Dateien ausgelesen werden und diese
überschreiben werden. Es soll in allen Dateien
(unterschiedliche Anzahl an Zeilen, ändert sich
stündlich) nach bestimmten Wörtern gesucht werden. Sofern
diese Wörter vorhanden sind, soll bei jedem dieser Wörter
die jeweilige Zeile entfernt werden (keine Leerzeilen).
Die txt Dateie zu auslesen sind "einfache Listen" mit
Tabs zwischen den Wörtern/ Zahlen/ Zeichen.
Leider funktioniert bisher keine Batchdatei, von denen,
die ich zugegebenermaßen kopiert habe.
Wer ist so lieb und hilft mir?
LG Markus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 250358
Url: https://administrator.de/contentid/250358
Ausgedruckt am: 25.11.2024 um 18:11 Uhr
19 Kommentare
Neuester Kommentar
Hallo Beginner01, willkommen im Forum.
Man kann mit Batch nicht einfach Zeilen löschen. Die Datei muss in jedem Fall neu geschrieben werden (unter Auslassung der Zeilen mit deinen Suchbegriffen).
Stolperfalle: In der Zwischenzeit könnte sich der Inhalt der Datei bereits ändern, wenn ich dich richtig verstanden habe.
Könnte das ein Problem werden?
Grüße
rubberman
Man kann mit Batch nicht einfach Zeilen löschen. Die Datei muss in jedem Fall neu geschrieben werden (unter Auslassung der Zeilen mit deinen Suchbegriffen).
Stolperfalle: In der Zwischenzeit könnte sich der Inhalt der Datei bereits ändern, wenn ich dich richtig verstanden habe.
Könnte das ein Problem werden?
Grüße
rubberman
Hallo Beginner01,
nehmen wir an, du hast eine Datei "test.txt" ...
... und willst alle Zeilen rausschmeißen, die abc oder 123 enthalten.
Grüße
rubberman
nehmen wir an, du hast eine Datei "test.txt" ...
aaa bbb ccc
aaa abc ccc
111 222 333
111 222 123
@echo off &setlocal
REM Datei, die du verarbeiten willst:
set "file=test.txt"
REM Suchzeichenfolgen in Anführungszeichen gesetzt und durch ein Leerzeichen getrennt:
set search="123" "abc"
set "tmpfile=%temp%\%file%.tmp~"
setlocal EnableDelayedExpansion
<"!file!" >"!tmpfile!" (
for /f %%i in ('type "!file!"^|find /c /v ""') do for /l %%j in (1 1 %%i) do (
set "line=" &set /p"line="
set "found="
if defined line (
for %%k in (!search!) do (
if "!line!" neq "!line:%%~k=!" set "found=1"
)
if not defined found echo(!line!
) else (
echo(
)
)
)
move /y "!tmpfile!" "!file!"
rubberman
Moin,
wenn Powershell für dich in Frage käme, reicht auch ein Einzeiler:
Grüße Uwe
wenn Powershell für dich in Frage käme, reicht auch ein Einzeiler:
dir "C:\Ordner\*.txt" | % {(gc $_.FullName) -notmatch 'WortA|WortB|WortC' | Set-Content -Path $_.Fullname }
'WortA|WortB|WortC'
sind die gesuchten Wörter die jeweils mit einer PIPE voneinander getrennt werden (Bitte beachten, das ist ein Regular Expression String, spezielle Regex-Sonderzeichen müssen darin mit Backslash escaped werden.)Grüße Uwe
Zitat von @Beginner01:
Mit Windows XP funktioniert dein Skript, mit Window Server 2012 nicht. Woran könnte das liegen/ gibt es weitere Ideen?
Mit Windows XP funktioniert dein Skript, mit Window Server 2012 nicht. Woran könnte das liegen/ gibt es weitere Ideen?
Kann ich leider nicht nachvollziehen, sorry. Hab weder Zugriff auf XP, noch Server 2012. Meine Testumgebung ist Win7 x86.
Grüße
rubberman
wieso jetzt in Java, wenn doch Powershell(Script siehe oben) seit Windows 7 in jeder Windows-Version enthalten ist ? Soll das irgendwie aus einer Webanwendung heraus aufgerufen werden ?
Zitat von @Beginner01:
Hallo Uwe, voneinader getrennt, bedeutet dann gelöscht oder wie darf ich das verstehen? Es geht ja (nur) darum diejenigen
Zeilen in den Textdatei zu entfernen, welche bestimmte (mehrere) Wörter enthalten.
klar, genau das macht ja das Script !!Hallo Uwe, voneinader getrennt, bedeutet dann gelöscht oder wie darf ich das verstehen? Es geht ja (nur) darum diejenigen
Zeilen in den Textdatei zu entfernen, welche bestimmte (mehrere) Wörter enthalten.
Wie erstelle ich die Funktion, d.h.
Texteditor, als ganz normale bat-Datei abspeichern
Du hast einen Server 2012 und hast noch nie was mit Powershell gemacht ? kann ich kaum glauben Texteditor, als ganz normale bat-Datei abspeichern
Zum ausprobieren kannst du einfach eine Powershell-Konsole öffnen (powershell.exe), und die Zeile eintippen.
Die Wörter die das Löschen der Zeilen in der Textdatei auslösen sollen gibst du wie oben schon geschrieben mit einer Pipe voneinander getrennt in der Code-Zeile an, feddich !
Wenn es dann läuft wie gewünscht, kannst du das ganze in einer Datei mit der Endung *.ps1 speichern und mit
powershell.exe "c:\deinscript.ps1"
ausführen lassen.Natürlich lassen sich die Werte mit Variablen versehen und dann über die Kommandozeile übergeben. Das Script sähe dann so aus
param(
[string]$path,
[string]$woerter
)
dir $path | % {(gc $_.FullName) -notmatch $woerter | Set-Content -Path $_.Fullname }
powershell.exe -File "C:\deinscript.ps1" "C:\Pfad\datei.txt" "Wort1|Wort2|Wort3"
Vorher aber bitte die Execution-Policy anpassen, sonst kannst du keine Scripte ausführen. Siehe Anleitung weiter unten...
Grüße Uwe
p.s. Du kannst deine Beiträge auch bearbeiten, dann braucht es nicht zwei drei Posts
mit dem selben Inhalt..
Anleitung: Wie starte ich Powershell-Scripte
- Zuerst speichert man den Code in einer Textdatei mit der Endung .ps1.
- Wenn man zum ersten mal Powershell-Scripte ausführt, musst man einmalig vorher noch das Ausführen von Scripten im User-Account freischalten. Dazu öffnet man eine Powershell-Konsole und gibt dort den Befehl
Set-ExecutionPolicy RemoteSigned -Force
ein. Um diese Policy für alle User auf dem Rechner zu setzen muss man diesen Befehl in einer Powershell-Konsole mit Admin-Rechten starten. Noch ein Hinweis für 64-Bit-Systeme: Hier sollte sowohl für die 32bit und 64Bit Variante der Powershell die Policy in einer Admin-Konsole gesetzt werden:Set-ExecutionPolicy RemoteSigned -Force; start-job { Set-ExecutionPolicy RemoteSigned -Force } -RunAs32
- Jetzt kann das Powershell-Script wie weiter unten erläutert in einer Powershell-Konsole oder aus einer CMD-Fenster heraus ausgeführt werden. Wer lieber mit der Maus arbeitet macht einen Rechtsklick auf die Script-Datei und wählt: Mit Powershell ausführen.
Starten eines Scriptes in einer Powershell-Konsole
Immer den kompletten Pfad zum Script angeben, und wenn er Leerzeichen beinhaltet in Anführungszeichen einschließen:"C:\Pfad\script.ps1"
.\script.ps1
Starten von PS-Scripten aus Batch und Kommandozeilen heraus:
Hier gibt es unterschiedliche Methoden, je nach Anforderungen gibt es hier einige Besonderheiten vor allem bei Leerzeichen in Pfaden zu beachten!Der einfachste Aufruf sieht hier so aus:
powershell.exe -File "C:\Pfad\Script.ps1"
powershell.exe -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"
powershell.exe -command "&'C:\Pfad\Script.ps1' -par1 'Wert1' -par2 'Wert2'"
powershell.exe -command "&'C:\Pfad\Script1.ps1';&'C:\Pfad\Script2.ps1'"
powershell -?
in einer Konsole an.Starten von PS-Scripten in der Aufgabenplanung (Taskplaner)
In der jeweiligen Aktion unter "Programm/Script" trägt man powershell.exe ein und unter "Argumente hinzufügen (optional)" trägt man wie oben geschrieben alles was hinter powershell.exe kommt ein - also z.B. -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"
Schön da du es geschafft hast, den Beitrag dann bitte noch auf gelöst setzen. Merci.