Texteil anhand zweier Vorgaben aus Datei löschen
Grüßt euch,
ich habe mich hier angemeldet, da ich folgendes Problem habe:
Ich möchte gerne aus sämtlichen Dateien mit der Endung .dat bestimmte Inhalte löschen. Diese beginnen immer mit <meta type="Keywords"> und enden mit </meta>. <meta type="Keywords"> und </meta> sollen dabei ebenfalls gelöscht werden. Der Inhalt ist allerdings immer unterschiedlich lang und befindet sich an unterschiedlichen stellen und die Dateien befinden sich kreuz und quer auf dem Rechner verteilt. Läßt sich das durch eine Batch oder Powershell lösen oder benötige ich dazu spezielle Software? Wenn ja, welche?
Danke fürs Reinschauen
tiforst
ich habe mich hier angemeldet, da ich folgendes Problem habe:
Ich möchte gerne aus sämtlichen Dateien mit der Endung .dat bestimmte Inhalte löschen. Diese beginnen immer mit <meta type="Keywords"> und enden mit </meta>. <meta type="Keywords"> und </meta> sollen dabei ebenfalls gelöscht werden. Der Inhalt ist allerdings immer unterschiedlich lang und befindet sich an unterschiedlichen stellen und die Dateien befinden sich kreuz und quer auf dem Rechner verteilt. Läßt sich das durch eine Batch oder Powershell lösen oder benötige ich dazu spezielle Software? Wenn ja, welche?
Danke fürs Reinschauen
tiforst
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 315119
Url: https://administrator.de/contentid/315119
Ausgedruckt am: 22.11.2024 um 06:11 Uhr
12 Kommentare
Neuester Kommentar
Moin,
Grüße,
Tiberius
Zitat von @tiforst:
Ich möchte gerne aus sämtlichen Dateien mit der Endung .dat bestimmte Inhalte löschen. Diese beginnen immer mit <meta type="Keywords"
soll die gesamte Zeile gelöscht werden, in der Das Keyword ist?Ich möchte gerne aus sämtlichen Dateien mit der Endung .dat bestimmte Inhalte löschen. Diese beginnen immer mit <meta type="Keywords"
die Dateien befinden sich kreuz und quer auf dem Rechner verteilt.
Heißt auch im Windows-Verzeichnis, oder in den Userordnern, etc.?Läßt sich das durch eine Batch oder Powershell lösen oder benötige ich dazu spezielle Software? Wenn ja, welche?
JupDanke fürs Reinschauen
BitteGrüße,
Tiberius
Teste diesen Code einmal:
Edit: Recure-Suche eingefügt
Edit2: Wegen Bearbeitungsrichtlinien ist das aktualisierte Skript weiter unten
clear-host
$source = "C:\Users\test\Desktop\Test"
$files = gci -recurse $source |?{$_.Extension -eq ".dat"}
$search = '<meta type="Keywords">'
foreach ($f in $files){
$content = gc $source\$f
$newcontent = @()
foreach($c in $content){
if ($c -notlike "*$search*"){
$newcontent += $c
}
}
Set-Content $source\$f $newcontent
}
Edit2: Wegen Bearbeitungsrichtlinien ist das aktualisierte Skript weiter unten
Hallo tiforst,
ich würde für die Bearbeitung einer XML-Datei eher den Weg über das dafür vorgesehene ActiveX-Objekt gehen, den Microsoft XML DOM Parser. Das verhindert auch Probleme mit der Codierung der XML-Datei (Windows 1252, ISO 8859-X, UTF-8, UTF-16 und was es sonst noch so gibt).
Wenn Du das Script z.B. als
wobei
Grüße
Friemler
ich würde für die Bearbeitung einer XML-Datei eher den Weg über das dafür vorgesehene ActiveX-Objekt gehen, den Microsoft XML DOM Parser. Das verhindert auch Probleme mit der Codierung der XML-Datei (Windows 1252, ISO 8859-X, UTF-8, UTF-16 und was es sonst noch so gibt).
@echo off & setlocal
set "VBScript=%TEMP%\DeleteMetaNode.vbs"
> "%VBScript%" echo.Dim objXmlDoc, colNodes, objNode, strFile
>>"%VBScript%" echo.
>>"%VBScript%" echo.If WScript.Arguments.Count ^> 0 Then
>>"%VBScript%" echo. strFile = WScript.Arguments(0)
>>"%VBScript%" echo.
>>"%VBScript%" echo. Set objXmlDoc = CreateObject("Microsoft.XMLDOM")
>>"%VBScript%" echo. objXmlDoc.async = False
>>"%VBScript%" echo.
>>"%VBScript%" echo. objXmlDoc.load(strFile)
>>"%VBScript%" echo.
>>"%VBScript%" echo. If objXmlDoc.parseError.errorCode = 0 Then
>>"%VBScript%" echo. Set colNodes = objXmlDoc.documentElement.selectNodes("//meta")
>>"%VBScript%" echo.
>>"%VBScript%" echo. For Each objNode In colNodes
>>"%VBScript%" echo. objNode.parentNode.removeChild(objNode)
>>"%VBScript%" echo. Next
>>"%VBScript%" echo.
>>"%VBScript%" echo. objXmlDoc.save(strFile)
>>"%VBScript%" echo. End If
>>"%VBScript%" echo.End If
if "%~1" neq "" (
set "RootFolder=%~1"
) else (
set "RootFolder=."
)
for /r "%RootFolder%" %%a in (*.dat) do (
echo Verarbeite %%a
cscript /nologo "%VBScript%" "%%a"
)
del "%VBScript%" > NUL
Wenn Du das Script z.B. als
DeleteMetaNodes.cmd
speicherst, kannst Du es folgendermaßen starten:DeleteMetaNodes "RootFolder"
RootFolder
der Pfad des Verzeichnisses ist, bei dem das Script starten soll rekursiv nach *.dat Dateien zu suchen. Wird dieser Parameter weggelassen, startet das Script beim aktuellen Verzeichnis.Grüße
Friemler
Zitat von @tiforst:
Danke Dir. das funktioniert sehr gut. Allerdings nur in dem einen Ordner, der unter source angegeben wird, nicht in dessen Unterordnern. Ließe sich das noch einfügen?
Jup, habe den oberen Code angepasst. Sollte jetzt klappen.Danke Dir. das funktioniert sehr gut. Allerdings nur in dem einen Ordner, der unter source angegeben wird, nicht in dessen Unterordnern. Ließe sich das noch einfügen?
Ich durfte den Quelltext nicht mehr nachträglich ändern.
clear-host
$source = "C:\Users\test\Desktop\Test"
$files = gci -recurse $source |?{$_.Extension -eq ".dat"}
$search = '<meta type="Keywords">'
foreach ($f in $files){
$filepath = $f.DirectoryName
$content = gc $filepath\$f
$newcontent = @()
foreach($c in $content){
if ($c -notlike "*$search*"){
$newcontent += $c
}
}
Set-Content $filepath\$f $newcontent
}
XML Files are preferred modified by using an XML parser and XPath selection, or XSLT, like @Friemler already suggested!
Regards
gci 'C:\Users\test\Desktop\Test' -recurse -Filter *.dat | %{
$xml = [xml](gc $_.Fullname)
if ($xml){
$xml.SelectNodes("//meta[@type='Keywords']")| %{$_.ParentNode.RemoveChild($_)}
$xml.Save($_.Fullname)
}
}
Hallo tiforst,
kann ich nicht nachvollziehen, das Script läuft hier einwandfrei, die Dateien werden geändert. Kann dann nur daran liegen, dass Deine Eingabedateien kein valides XML enthalten. Um das festzustellen müsstest Du mal eine (evtl. verkürzte) Beispieldatei hier posten. Sensible Daten kannst Du dazu ausmaskieren.
Grüße
Friemler
kann ich nicht nachvollziehen, das Script läuft hier einwandfrei, die Dateien werden geändert. Kann dann nur daran liegen, dass Deine Eingabedateien kein valides XML enthalten. Um das festzustellen müsstest Du mal eine (evtl. verkürzte) Beispieldatei hier posten. Sensible Daten kannst Du dazu ausmaskieren.
Grüße
Friemler