Bestimmtes Wort aus einer Textdatei löschen
Hallo zusammen,
ich möchte mittels Batch bestimmte Zeilen aus einer Textdatei löschen. Habe hier auch schon paar sachen gesehen, aber irgendwie noch nichts was zu meinem Problem passt.
Der Hintergrund ist, dass ich mittels Batch eine Textdatei auslese in welcher Computernamen stehen und dort dann Lizenzschlüssel auslese. Jetzt möchte ich aber nicht jedesmal bei der Ausführung des Skriptes alle Rechner abfragen sondern nur die, die ich noch nicht ausgelesen habe.
Deswegen würde ich die erfolgreich ausgelesen Rechner gerne aus der Liste löschen. Somit möchte ich auch verhindern, dass in meiner Excel-Datei Rechner+Lizenz 2 mal auftauchen.
Vielen dank schonmal für eure Tipps
Grüße
Schlumpf
ich möchte mittels Batch bestimmte Zeilen aus einer Textdatei löschen. Habe hier auch schon paar sachen gesehen, aber irgendwie noch nichts was zu meinem Problem passt.
Der Hintergrund ist, dass ich mittels Batch eine Textdatei auslese in welcher Computernamen stehen und dort dann Lizenzschlüssel auslese. Jetzt möchte ich aber nicht jedesmal bei der Ausführung des Skriptes alle Rechner abfragen sondern nur die, die ich noch nicht ausgelesen habe.
Deswegen würde ich die erfolgreich ausgelesen Rechner gerne aus der Liste löschen. Somit möchte ich auch verhindern, dass in meiner Excel-Datei Rechner+Lizenz 2 mal auftauchen.
Vielen dank schonmal für eure Tipps
Grüße
Schlumpf
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 174644
Url: https://administrator.de/contentid/174644
Ausgedruckt am: 25.11.2024 um 03:11 Uhr
18 Kommentare
Neuester Kommentar
Servus,
So was aber auch..
(OT)
Scheibenkleister mittlerweile ist es hier genauso schlimm, wie im MCSE Forum - aus dem ich mich vor Jahren abgemeldet hab, weil da nur noch Anspruchsvolle Fragen von "Kollegen" gestellt wurden, die wohl niemals nie einen MSCx machen werden.
(/OT)
Wer die Suchfunktion nicht benutzt und dieses Forum mit Banalitäten beschmutzt
wenn einem gutes widerfährt, dass ist dann einen Wenig anspruchsvoll wert.
So was aber auch..
(OT)
Scheibenkleister mittlerweile ist es hier genauso schlimm, wie im MCSE Forum - aus dem ich mich vor Jahren abgemeldet hab, weil da nur noch Anspruchsvolle Fragen von "Kollegen" gestellt wurden, die wohl niemals nie einen MSCx machen werden.
(/OT)
Wer die Suchfunktion nicht benutzt und dieses Forum mit Banalitäten beschmutzt
wenn einem gutes widerfährt, dass ist dann einen Wenig anspruchsvoll wert.
Hallo ITSchlumpf,
ich nehme zu deinen Gunsten mal an, dass du in Batchscript einfach nicht fit genug bist, um bestehende Lösungen auf dein Problemchen umzustricken. Deshalb hier die Skizze einer Lösung:
Dir bleibt jetzt noch die Aufgabe, das Unterprogramm
Gruß
Friemler
ich nehme zu deinen Gunsten mal an, dass du in Batchscript einfach nicht fit genug bist, um bestehende Lösungen auf dein Problemchen umzustricken. Deshalb hier die Skizze einer Lösung:
@echo off & setlocal
set "CList=ComputerListe.txt"
set "TempCList=TempListe.txt"
type NUL > "%TempCList%"
for /f "usebackq delims=" %%c in ("%CList%") do (
call :CheckLic "%%c" || >>"%TempCList%" echo %%c
)
move /y "%TempCList%" "%CList%"
exit /b
:CheckLic
::Wenn Rechner gefunden und Lizenzkey ausgelesen werden konnte
exit /b 0
::Sonst
exit /b 1
Dir bleibt jetzt noch die Aufgabe, das Unterprogramm
CheckLic
mit Leben zu füllen. Je nachdem ob das Auslesen des Lizenzkeys erfolgreich war oder nicht, muss das Unterprogramm mit exit /b x
entweder 0 (erfolgreich) oder einen von 0 verschiedenen Wert, z.B. 1, (nicht erfolgreich) zurück liefern. Bei "nicht erfolgreich" wird der aktuelle Rechnername in eine temporäre Datei geschrieben, durch die zum Schluss die originale Datei ersetzt wird.Gruß
Friemler
@Friemler
Wozu eigentlich das "
Und außerdem: Warum nicht ein simples "
Grüße
bastla
Wozu eigentlich das "
/y
" beim "move
"?Und außerdem: Warum nicht ein simples "
findstr /v
" (ggf mit "/i
")?Grüße
bastla
Zitat von @ITSchlumpf:
du hast mein Problem richtig erkannt. Ich bin ein Batch - Neuling und versuche mich da Schritt für Schritt einzuarbeiten aber ist halt nicht immer so einfach. Zudem ich versuche ja die Scripte anderer umzubauen aber wenn ich es eben nicht hinbekommen frag ich eben nach.
Falsch! Du fragst nicht nach, sondern fragst vom Fundament aus. Wenn du nicht weiterkommst, dann solltest du bereits einen Code haben, wo du glaubst, daran könnte man weiterarbeiten und auch nur dann - denn so neu bist du auch nicht mehr - würden Leute wie T-Mo und ich dir weiterhelfen ... wenn du aber nur mit plain-Text ankommst und von Grund auf hier etwas geschenkt bekommen willst, obwohl wir so viele Threads mit so vielen Erklärungen haben - zu einem dauerdurchgekauten Thema, dann tut es mir leid aber dann darfst du nicht viel erwarten.du hast mein Problem richtig erkannt. Ich bin ein Batch - Neuling und versuche mich da Schritt für Schritt einzuarbeiten aber ist halt nicht immer so einfach. Zudem ich versuche ja die Scripte anderer umzubauen aber wenn ich es eben nicht hinbekommen frag ich eben nach.
Dafür bin ich ja auch in so einem Forum angemeldet. Aber okay, wer nicht helfen möchte, brauch ja eig auch nichts dazu schreiben.
Stimmt, weil wir so ungern helfen ...P.S.:
set "eeepc=Inhalt der weg soll"
type D:\Batch\test_loeschen_zeilen\test.txt |find /v /i "%eeepc%">temp.txt && move /y temp.txt D:\Batch\test_loeschen_zeilen\test2.txt
... ohne Zollzeichen um die Variable bekommst du eine aussagekräftige Fehlermeldung: FIND: Parameterformat falsch und mit definiertem Inhalt der Variable nimmt er die Zeilen auch raus ...
E:\Skripte>type E:\Skripte\datei.txt
Also in Zeile eins kommt wohl nichts
von dem gesuchten Wort
vor aber eventuell
in Zeile vier cowabunga
oder Zeile sechs, die beim Neuschreiben
noch nach der Leerzeile da bleibt, wenn
Zeile acht auch wieder Cowabunga
enthaelt na, mal sehen.
E:\Skripte>pause
Drücken Sie eine beliebige Taste . . .
E:\Skripte>set "eeepc=cowabunga"
E:\Skripte>type E:\Skripte\datei.txt | find /v /i "cowabunga" 1>temp.txt &&
move /y temp.txt E:\Skripte\datei2.txt
E:\Skripte>pause
Drücken Sie eine beliebige Taste . . .
E:\Skripte>type E:\Skripte\datei2.txt
Also in Zeile eins kommt wohl nichts
von dem gesuchten Wort
vor aber eventuell
oder Zeile sechs, die beim Neuschreiben
noch nach der Leerzeile da bleibt, wenn
enthaelt na, mal sehen.
E:\Skripte>pause
Drücken Sie eine beliebige Taste . . .
@Friemler
Grüße
bastla
Verstehe ich in diesem Zusammenhang nicht.
Je nach Ablauf (die diesbezügliche Beschreibung durch den TO hat noch Potenzial ) ginge es doch eigentlich nur darum, jeweils die Zeile des entsprechenden Rechners aus der Datei zu entfernen - also eigentlich (unter Annahme eines Trennzeichens ";"):findstr /i /b /v "%Rechnername%;" "%DateiAlt%">"%DateiNeu%"
bastla
Last Orders please...
Da unser IT Schlumpf sich wohl mittlerweile (welche Farbe haben die denn) geärgert hat, sein Feedback wohl erst dann kommt, wenn der Weihnachtsmann mit dem Hansi Hintermsee Schuhpladdeln geht...
Spiele ich mal ausnahmsweise den heiligen Netzwerg. In der Hoffnung, dass wir in bälde einen ITschlumpfarbenen Siemenslufthaken unter der Nummer stehen haben.
Daten löschen - warum überhaupt das versteh ich nicht.
@me myselfandI
ITSchlumpf==cooler Nick muß ich mir merken. "ich hab nix gefunden"=="ich hab nix gemacht" Acho Pfade und Dateinamen muß man sich wie in den anderen fast ähnlichen, aber nicht gganz passenden Treffern auch anpassen - oder vom Profi anpassen lassen.
Amen
Da unser IT Schlumpf sich wohl mittlerweile (welche Farbe haben die denn) geärgert hat, sein Feedback wohl erst dann kommt, wenn der Weihnachtsmann mit dem Hansi Hintermsee Schuhpladdeln geht...
Spiele ich mal ausnahmsweise den heiligen Netzwerg. In der Hoffnung, dass wir in bälde einen ITschlumpfarbenen Siemenslufthaken unter der Nummer stehen haben.
Daten löschen - warum überhaupt das versteh ich nicht.
for /f "tokens=1,2 delims=;" %%a in (C:\script\tabellen\tabelle.txt) do if "%%b" == "" echo %%a hat keine Seriennummer
pause
if exist C:\script\tabellen\tabelle.ini del C:\script\tabellen\tabelle.ini
for /f "tokens=1,2 delims=;" %%a in (C:\script\tabellen\tabelle.txt) do if not "%%b" == "" echo %%a;%%b>>C:\script\tabellen\tabelle.ini
pause
@me myselfandI
ITSchlumpf==cooler Nick muß ich mir merken. "ich hab nix gefunden"=="ich hab nix gemacht" Acho Pfade und Dateinamen muß man sich wie in den anderen fast ähnlichen, aber nicht gganz passenden Treffern auch anpassen - oder vom Profi anpassen lassen.
Amen
Zitat von @ITSchlumpf:
@bastla: Ansatz sieht gut aus, aber dann löscht er mir ja nicht die Daten aus der Textdatei raus sondern schreibt sie nur in eine andere rein. Oder sehe/teste ich das falsch?
... poc zu anspruchsvoll? bastlas Weg ist kürzer, ich hielt mich an deinen Code, der ja gar nichts macht ... und beide tun dasselbe ... ich bezweifle, dass du wirklich was testest ...@bastla: Ansatz sieht gut aus, aber dann löscht er mir ja nicht die Daten aus der Textdatei raus sondern schreibt sie nur in eine andere rein. Oder sehe/teste ich das falsch?
kann mir bastla mal sein noch nicht vergebenes nicht anspruchsvoll bitte leihen ...
Das sieht cool aus
seit wann sehen codes cool aus, gibt's hier B-Noten für den Style oder wie?
- sorry - aber dein Skript sehe ich nicht - muß ich die Augenklappe hochheben, oder du das Script hier reinmalen?
Wenn ich das Skript aber mehrmals durchlaufen lasse, da ich nicht auf anhieb alle Rechner erwische zwecks Zeitverschiebung etc., schreibt mir das Skript die Lizenzen doppelt in die Excel datei.
- wofür denkst du, habe ich dir u.a diese Zeile
for /f "tokens=1,2 delims=;" %%a in (C:\script\tabellen\tabelle.txt) do if "%%b" == "" echo %%a hat keine Seriennummer
Deswegen war der Gedanken dahinter, ich lösche die erfolgreichen raus und muss dann nur noch die Abfragen, die noch nicht durchgelaufen sind.
- Warum löschen? Und dann ausgerechnet die "Erfolgreichen?"
@bastla: Ansatz sieht gut aus, aber dann löscht er mir ja nicht die Daten aus der Textdatei raus sondern schreibt sie nur in eine andere rein. Oder sehe/teste ich das falsch?
Du kannst "in Batch ohne Tricks" keine Zeilen löschen - das muß man mit "Tricks" machen und der Bastlasche Trick ist nur ein anderer WegVielen danke auf jedenfall für die ganze Hilfe ;)
Gruß
Schlumpf
Gruß
Schlumpf
zurück und bitte - lese dir alle Antworten durch - so Seitenhiebe wie (die diesbezügliche Beschreibung durch den TO hat noch Potenzial ) haben "leider" eine Daseinsberechtigung.
Au Backe...
Du fragst vorher nach enu oder ger ab - dann aber immer nach empfangen, was ENU niemals nie nicht liefert.
TTL liefert sogar ein Lampukisches XP...
liefert - x64 sehe ich eh nirgendwo - immer den Pfad, den du willst - egal ob enu/deu oder Lampukisch
"Eigentlich" gings dir u.a um Zeile 55 - aber ehrlich, das würde ich mir nicht antun und das Ding mal locker um die hälfte eindampfen, das kann doch ohne REM keiner warten..
Siehe deine Zeile 46 - Beckhoffeng da rennt er immer hin....
ping -n 2 %eeepc% |find "Empfangen = 2"
ist doch doppelter Bullshit...Du fragst vorher nach enu oder ger ab - dann aber immer nach empfangen, was ENU niemals nie nicht liefert.
TTL liefert sogar ein Lampukisches XP...
if exist "\\%eeepc%\C$\TwinCAT\OPC\Server4\TcOPCCfg.exe" goto Beckhoffeng
if exist "\\%eeepc%\C$\Program Files\Softing\OPCTray\OPCTray.exe" (goto Softingeng) else (goto eof2)
if exist "\\%eeepc%\C$\Program Files\Softing\OPCTray\OPCTray.exe" (goto Softingeng) else (goto eof2)
- keine Ahnung, was das soll.. Wenn die Kiste TwinCAT hat, dann hat die niemals nie nicht kein OPCTray?
if exist "\\%eeepc%\C$\Progra~1\Softing\OPCTray\OPCTray.exe"
"Eigentlich" gings dir u.a um Zeile 55 - aber ehrlich, das würde ich mir nicht antun und das Ding mal locker um die hälfte eindampfen, das kann doch ohne REM keiner warten..
Siehe deine Zeile 46 - Beckhoffeng da rennt er immer hin....
Edit
nochmal....
for /f "tokens=1,2 delims=;" %%a in (C:\script\tabellen\tabelle.txt) do if "%%b" == "" echo %%a hat keine Seriennummer
nenn das meinetwegen:for /f "tokens=1,2 delims=;" %%a in (Beckhoff.csv) do if "%%b" == "" call Maineng %%a
/edit