Aus Textdatei Zeilen löschen mit Bat oder VBS
Hallo zusammen,
ich habe folgendes Problem.
Ich habe einen txt Datei die so aussieht:
Dateiname: sb-p-ghost.hji.local.sw_Software_.txt
(Computername)(Domäne)(Bezeichnung)
ist aber egal.
[Notepad++]
displayversion = 5.3.1
binaryname = C:\\Programme\\Notepad++\\updater\\GUP.exe
displayname = Notepad++
installsize = 6828032
uninstallstring = C:\\Programme\\Notepad++\\uninstall.exe
[InstallWIX_{8F023021-A7EB-45D3-9269-D65264C81729}]
displayversion = 6.0.4.1212
binaryname = C:\\Programme\\Kaspersky Lab\\Kaspersky Anti-Virus 6.0 for Windows Workstations MP4\\avp.exe
displayname = Kaspersky Anti-Virus 6.0 for Windows Workstations
installsize = -1
uninstallstring = MsiExec.exe /I{8F023021-A7EB-45D3-9269-D65264C81729}
[KB938127-IE7]
displayversion = 1
binaryname =
displayname = Sicherheitsupdate für Windows Internet Explorer 7 (KB938127)
installsize = -1
uninstallstring = \"C:\\WINDOWS\\ie7updates\\KB938127-IE7\\spuninst\\spuninst.exe\"
[KB923789]
displayversion =
binaryname =
displayname = Sicherheitsupdate für Windows XP (KB923789)
installsize = -1
uninstallstring = C:\\WINDOWS\\system32\\MacroMed\\Flash\\genuinst.exe C:\\WINDOWS\\system32\\MacroMed\\Flash\\KB923789.inf
(ist nur ein kleiner ausschnitt)
Ich möchte das ich alles herauslösche bis auf den Text nach "displayname = ".
Hab schon eine Bat:
_________________________________________________________
find /v /i "binaryname" < "C:\Opsi_Excel\sb-l-601.hji.local.sw_Software_.txt" > "C:\Opsi_Excel\1.txt"
find /v /i "installsize" < "C:\Opsi_Excel\1.txt" > "C:\Opsi_Excel\2.txt"
find /v /i "displayversion" < "C:\Opsi_Excel\2.txt" > "C:\Opsi_Excel\3.txt"
find /v /i "uninstallstring" < "C:\Opsi_Excel\3.txt" > "C:\Opsi_Excel\4.txt"
find /v /i "[" < "C:\Opsi_Excel\4.txt" > "C:\Opsi_Excel\5.txt"
find /v /i "[displayname = ]" < "C:\Opsi_Excel\5.txt" > "C:\Opsi_Excel\sb-l-601_Software.txt"
del C:\Opsi_Excel\1.txt /S /Q
del C:\Opsi_Excel\2.txt /S /Q
del C:\Opsi_Excel\3.txt /S /Q
del C:\Opsi_Excel\4.txt /S /Q
del C:\Opsi_Excel\5.txt /S /Q
____________________________________________________________
Ergebnis:
displayname = Notepad++
displayname = Kaspersky Anti-Virus 6.0 for Windows Workstations
displayname = Sicherheitsupdate für Windows Internet Explorer 7 (KB938127)
displayname = Sicherheitsupdate für Windows XP (KB923789)
Wie bekomme ich den Teil "displayname= " weg...?
2.Frage
Wenn ich mehrere solche txt Datei habe, die sich in einem Ordner befinden kann ich dann alle in einer bat so "formatieren"...?
Habe:
sb-p-418.hji.local.sw_Software_.txt
sb-p-ghost.hji.local.sw_Software_.txt
sb-l-601.hji.local.sw_Software_.txt
sb-p-xptest.hji.local.sw_Software_.txt
sd-l-110.hji.local.sw_Software_.txt
Diese Files befinden sich im selben Ordner.
Bitte um Hilfe.
Danke
Mit freundlichen Grüssen
Benni
ich habe folgendes Problem.
Ich habe einen txt Datei die so aussieht:
Dateiname: sb-p-ghost.hji.local.sw_Software_.txt
(Computername)(Domäne)(Bezeichnung)
ist aber egal.
[Notepad++]
displayversion = 5.3.1
binaryname = C:\\Programme\\Notepad++\\updater\\GUP.exe
displayname = Notepad++
installsize = 6828032
uninstallstring = C:\\Programme\\Notepad++\\uninstall.exe
[InstallWIX_{8F023021-A7EB-45D3-9269-D65264C81729}]
displayversion = 6.0.4.1212
binaryname = C:\\Programme\\Kaspersky Lab\\Kaspersky Anti-Virus 6.0 for Windows Workstations MP4\\avp.exe
displayname = Kaspersky Anti-Virus 6.0 for Windows Workstations
installsize = -1
uninstallstring = MsiExec.exe /I{8F023021-A7EB-45D3-9269-D65264C81729}
[KB938127-IE7]
displayversion = 1
binaryname =
displayname = Sicherheitsupdate für Windows Internet Explorer 7 (KB938127)
installsize = -1
uninstallstring = \"C:\\WINDOWS\\ie7updates\\KB938127-IE7\\spuninst\\spuninst.exe\"
[KB923789]
displayversion =
binaryname =
displayname = Sicherheitsupdate für Windows XP (KB923789)
installsize = -1
uninstallstring = C:\\WINDOWS\\system32\\MacroMed\\Flash\\genuinst.exe C:\\WINDOWS\\system32\\MacroMed\\Flash\\KB923789.inf
(ist nur ein kleiner ausschnitt)
Ich möchte das ich alles herauslösche bis auf den Text nach "displayname = ".
Hab schon eine Bat:
_________________________________________________________
find /v /i "binaryname" < "C:\Opsi_Excel\sb-l-601.hji.local.sw_Software_.txt" > "C:\Opsi_Excel\1.txt"
find /v /i "installsize" < "C:\Opsi_Excel\1.txt" > "C:\Opsi_Excel\2.txt"
find /v /i "displayversion" < "C:\Opsi_Excel\2.txt" > "C:\Opsi_Excel\3.txt"
find /v /i "uninstallstring" < "C:\Opsi_Excel\3.txt" > "C:\Opsi_Excel\4.txt"
find /v /i "[" < "C:\Opsi_Excel\4.txt" > "C:\Opsi_Excel\5.txt"
find /v /i "[displayname = ]" < "C:\Opsi_Excel\5.txt" > "C:\Opsi_Excel\sb-l-601_Software.txt"
del C:\Opsi_Excel\1.txt /S /Q
del C:\Opsi_Excel\2.txt /S /Q
del C:\Opsi_Excel\3.txt /S /Q
del C:\Opsi_Excel\4.txt /S /Q
del C:\Opsi_Excel\5.txt /S /Q
____________________________________________________________
Ergebnis:
displayname = Notepad++
displayname = Kaspersky Anti-Virus 6.0 for Windows Workstations
displayname = Sicherheitsupdate für Windows Internet Explorer 7 (KB938127)
displayname = Sicherheitsupdate für Windows XP (KB923789)
Wie bekomme ich den Teil "displayname= " weg...?
2.Frage
Wenn ich mehrere solche txt Datei habe, die sich in einem Ordner befinden kann ich dann alle in einer bat so "formatieren"...?
Habe:
sb-p-418.hji.local.sw_Software_.txt
sb-p-ghost.hji.local.sw_Software_.txt
sb-l-601.hji.local.sw_Software_.txt
sb-p-xptest.hji.local.sw_Software_.txt
sd-l-110.hji.local.sw_Software_.txt
Diese Files befinden sich im selben Ordner.
Bitte um Hilfe.
Danke
Mit freundlichen Grüssen
Benni
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 140202
Url: https://administrator.de/contentid/140202
Ausgedruckt am: 22.11.2024 um 08:11 Uhr
23 Kommentare
Neuester Kommentar
Hallo ortnerbeni und willkommen im Forum!
Eigentlich sollte sich die Suche ja "positiv" formulieren lassen, also etwa:
Wenn das funktioniert, und damit alle Dateien eines Ordners (oder nur Tetdateien, deren Name mit "s" beginnt) erfasst werden, könnte ein (ungetesteter) Batch etwa so aussehen:
Grüße
bastla
Eigentlich sollte sich die Suche ja "positiv" formulieren lassen, also etwa:
findstr /b /c:"displayname = " "sb-p-ghost.hji.local.sw_Software_.txt"
@echo off & setlocal
set "Ordner=D:\SW-Info"
set "Maske=s*.txt"
set "Ergebnis=C:\Opsi_Excel\sb-l-601_Software.txt"
del "%Ergebnis%" 2>nul
for %%i in ("%Ordner%\%Maske%") do for /f "tokens=2*" %%a in ('findstr /b /c:"displayname = " "%%i"') do >>"%Ergebnis%" echo %%b
bastla
Hallo ortnerbeni!
Jede Datei zu behalten und nur auf den gewünschten Inhalt zu reduzieren sollte etwa so zu machen sein:
Achtung - in dieser Fassung werden die Dateien im Ordner %Ordner% überschrieben! Wenn Du die Zeile 8 weg lässt, verbleibt allerdings das Original (als Sicherung) im Ordner %temp% ...
Grüße
bastla
aber es filtert nur aus "sb-l-601.hji.local.sw_Software_.txt" oda..?
Nur, wenn ich etwas falsch gemacht oder Du nur diese eine mit "s" beginnende Textdatei im Ordner hattest ...Jede Datei zu behalten und nur auf den gewünschten Inhalt zu reduzieren sollte etwa so zu machen sein:
@echo off & setlocal
set "Ordner=D:\SW-Info"
set "Maske=s*.txt"
for %%i in ("%Ordner%\%Maske%") do (
move "%%i" "%temp%\%%~nxi"
for /f "tokens=2*" %%a in ('findstr /b /c:"displayname = " "%temp%\%%~nxi"') do >>"%%i" echo %%b
del "%temp%\%%~nxi"
)
Grüße
bastla
Hallo ortnerbeni!
Grüße
bastla
Möchte gerne nur die Fetten Teile der Textdatei Filtern aber wie..?
Gleiches Prinzip wie oben, nur dass Du alle Suchbegriffe in einer Datei zusammenfassen (jeden Begriff in einer eigenen Zeile angeben) und anstelle von "/c:" dann "/g:" verwenden solltest (siehe "findstr /?
") ...Grüße
bastla
Tja, ortnerbeni,
Da Batch- oder VBS-Skripte mit unformatiertem Text arbeiten ist es schwierig, denen einen Ausdruck mit ein paar fettgedruckten Zeilen unter die virtuellen Augen zu halten und zu sagen: "Hol mir die fetten Zeilen".
Was soll denn deine Logik sein ....wie bist du ausgerechnet auf diese Zeilen gekommen und wie soll ein Skript darauf kommen?
Grüße
Biber
Möchte gerne nur die Fetten Teile der Textdatei Filtern aber wie..?
Ich kenn mich da auch nicht so aus, aber ein oft praktizierter Ansatz bei der Implementierung ist, dass derjenige, der versucht einen automatisierbaren Prozess zu etablieren zunächst eine verbale Beschreibung, ein Wenn-Dann-Regelwerk für den Ablauf zu erstellen.Da Batch- oder VBS-Skripte mit unformatiertem Text arbeiten ist es schwierig, denen einen Ausdruck mit ein paar fettgedruckten Zeilen unter die virtuellen Augen zu halten und zu sagen: "Hol mir die fetten Zeilen".
Was soll denn deine Logik sein ....wie bist du ausgerechnet auf diese Zeilen gekommen und wie soll ein Skript darauf kommen?
Grüße
Biber
Moin ortnerbeni,
Jepp. das habe ich irgendwie vorausgesehen.
Magst du jetzt bitte auch noch mal das machen, was "Biber" gesagt hat?
Es sei denn, du kannst tatsächlich deine Bätche mit der Anweisung "Hol mir die fettgedruckten Zeilen" hinreichend instruieren....
Grüße
Biber
Jepp. das habe ich irgendwie vorausgesehen.
Magst du jetzt bitte auch noch mal das machen, was "Biber" gesagt hat?
Es sei denn, du kannst tatsächlich deine Bätche mit der Anweisung "Hol mir die fettgedruckten Zeilen" hinreichend instruieren....
Grüße
Biber
Hallo ortnerbeni!
Wenn wir noch bei Batch bleiben wollen, dann für eine einzelne Datei (ob auch hier gleich mehrere Dateien verarbeitet werden sollten, geht aus Deiner Beschreibung nicht hervor) etwa so:
Gesucht werden die Werte nach der oben angeführten Vorschrift "Finde den ersten Attributwert (für zB "name") nach der angegebenen Section-Überschrift (zB "[COMPUTER_SYSTEM_0]") - dabei wird nicht geprüft, ob dieser Wert tatsächlich noch in dieser Section enthalten ist; wenn es daher in "[COMPUTER_SYSTEM_0]" keine Zeile für "name" gibt, würde das Ergebnis zB "WAN-Miniport (PPTP)" lauten (bei Bedarf lässt sich dafür aber noch eine entsprechende Prüfung einbauen) ...
Noch als Anmerkung: Da nur relativ wenige Daten herausgefiltert werden sollen, habe ich diese unmittelbar in der Schleife untergebracht - alternativ könnte auch zB eine ".ini"-Datei zur Festlegung der benötigten Wert verwendet werden.
Grüße
bastla
Wenn wir noch bei Batch bleiben wollen, dann für eine einzelne Datei (ob auch hier gleich mehrere Dateien verarbeitet werden sollten, geht aus Deiner Beschreibung nicht hervor) etwa so:
@echo off & setlocal
set "Datei=D:\Computer-Info.txt"
set "TempInfo=%temp%\Info.txt"
move "%Datei%" "%TempInfo%"
for %%i in ("[COMPUTER_SYSTEM_0];totalphysicalmemory","[COMPUTER_SYSTEM_0];name","[PROCESSOR_0];name","[HARDDISK_DRIVE_0];size") do (
for /f "tokens=1-2 delims=;" %%a in (%%i) do for /f "delims=:" %%n in ('findstr /n "^" "%TempInfo%"^|findstr /l /c:":%%a"') do call :ProcessLine %%n "%%b"
)
del "%TempInfo%"
goto :eof
:ProcessLine
set Gefunden=
for /f "delims=" %%t in ('more +%1 "%TempInfo%"^|findstr /b /c:"%~2 = "') do if not defined Gefunden (set "Gefunden=True" & >>"%Datei%" echo\%%t)
goto :eof
Noch als Anmerkung: Da nur relativ wenige Daten herausgefiltert werden sollen, habe ich diese unmittelbar in der Schleife untergebracht - alternativ könnte auch zB eine ".ini"-Datei zur Festlegung der benötigten Wert verwendet werden.
Grüße
bastla
Moin bastla,
Wie ich schon immer sagte: "Alles außer Brotschneiden..... "
Sehr eindrucksvoll.
@ortnerbeni
Andererseits wollte ich es gar nicht sooo weit treiben...eigentlich hatte ich gehofft, dass von dir die (gepostete) Überlegung kommt:
Okay, kam nun leider nicht... also lass uns hier einen Haken dran machen und ins Wochenende fahren.
Grüße
Biber
Wie ich schon immer sagte: "Alles außer Brotschneiden..... "
Sehr eindrucksvoll.
@ortnerbeni
Andererseits wollte ich es gar nicht sooo weit treiben...eigentlich hatte ich gehofft, dass von dir die (gepostete) Überlegung kommt:
"Ja hey! Aus diesem unstruktierten und nur von Erbsenzählern lesbaren Textgestrunkele kann doch kein halbwegs handelsüblich aufgebautes Programm irgendwelche Informationen gezielt herausflöhen wollen...
Kann ich denn diese 4 oder 5 Informationen Hauptspeichergröße, Prozessormodell und Festplattenplatz eines Rechners nicht irgendwie gezielt abfragen über dieses WMIC-Geraffel?"
Kann ich denn diese 4 oder 5 Informationen Hauptspeichergröße, Prozessormodell und Festplattenplatz eines Rechners nicht irgendwie gezielt abfragen über dieses WMIC-Geraffel?"
Okay, kam nun leider nicht... also lass uns hier einen Haken dran machen und ins Wochenende fahren.
Grüße
Biber
@Biber
Grüße
bastla
Sehr eindrucksvoll.
Danke - hab' ich aber ohnehin so gut wie alles zuerst einmal bei Dir gesehen ... Grüße
bastla
@bastla
Im Ernst - in diesem Textbrei würde ich mit keinem meiner Lieblingsbätche rumrühren...
Anyhow - schönes Wochenende!
Grüße
Biber
Zitat von @bastla:
@Biber
Danke - hab' ich aber ohnehin so gut wie alles zuerst einmal bei Dir gesehen ...
Hmmm... soll das heissen, ich mache auch alles mit Batch, was technisch möglich ist und nicht gegen die Gesetze der Schwerkraft verstößt?? @Biber
Danke - hab' ich aber ohnehin so gut wie alles zuerst einmal bei Dir gesehen ...
Im Ernst - in diesem Textbrei würde ich mit keinem meiner Lieblingsbätche rumrühren...
Anyhow - schönes Wochenende!
Grüße
Biber
@Biber
Schönes Wochenende
bastla
Hmmm... soll das heissen, ich mache auch alles mit Batch, was technisch möglich ist und nicht gegen die Gesetze der Schwerkraft verstößt??
Bei Letzterem bin ich mir nicht so sicher (wobei ich mich allerdings sehr streng an diese Gesetze halte ) ...Schönes Wochenende
bastla
Moin ortnerbeni,
ich hab noch mal den Beitrag überflogen.
Und habe beschlossen, dass die ursprünglich gestellte Frage hinreichend beantwortet ist und eigentlich auch für die LösungssucherInnen von benutzer.de sichtbar sein sollte.
Deshalb setze ich den Beitrag mal auf "Gelöst", egal ob noch Feedback von dir kommt oder nicht.
Grüße
Biber
ich hab noch mal den Beitrag überflogen.
Und habe beschlossen, dass die ursprünglich gestellte Frage hinreichend beantwortet ist und eigentlich auch für die LösungssucherInnen von benutzer.de sichtbar sein sollte.
Deshalb setze ich den Beitrag mal auf "Gelöst", egal ob noch Feedback von dir kommt oder nicht.
Grüße
Biber