fantomas741
Goto Top

Find und Replace Skript für Verzeichnis

Hallo Leute,

zu diesem Thema gibt es ja schon ein paar Beiträge, aber meine "Batch" Kenntnisse reichen nicht aus um diese zu verstehen bzw. auf meine Bedürfnisse anzupassen, ich wollte meine Frage dort jetzt auch nicht reinstellen da der letzte Beitrag von 2011 ist und vielleicht gibts auch ne schöne Lösung mit VBS face-smile

Also ich beschreib mal kurz meine Problemstellung:

Ich habe ein Verzeichnis ...\res dort befinden sich mehere (100+) dateien mit den unterschiedlichsten Dateinamen aber immer gleicher Dateiendung...

1. ich müsste also alle Dateien dieses Typs öffnen und reingucken

im Prinzip sind es Textdateien, dort werden Parameter definiert, ich möchte diese Parameter auf einen bestimmten Wert nämlich 0 setzen

Beispiel:

Datei 1:
Parameter = 50

Neuer wert soll 0 sein,

Datei 2:
Parameter = 35

Neuer wert soll 0 sein

womit ich bei 2. wäre: Wenn der Wert bei Parameter nicht 0 ist dann setze ihn auf 0
3. Die datei dann Speichern (Überschreiben)

Vielen dank schonmal vorab für eure Hilfe,
LG Fantomas

Content-Key: 257671

Url: https://administrator.de/contentid/257671

Printed on: April 23, 2024 at 11:04 o'clock

Member: colinardo
colinardo Dec 15, 2014 updated at 15:27:04 (UTC)
Goto Top
Hallo Fantomas,
gibts zwar schon etliche Beispiel hier im Forum, aber hier noch mal eins mit Powershell:
gci "C:\ordner\*.txt" | %{  
    $content = gc $_.Fullname | out-string
    if (([regex]::match($content,'Parameter = (\d+)').Groups[1].Value) -gt 0){  
        $content -replace '(Parameter = )(\d+)','${1}0' | Set-Content $_.Fullname -Force  
    }
}
Oder wenn's VBS sein muss:
Const ORDNER = "C:\ordner"  
Const EXTENSION = "txt"  
Set fso = CreateObject("Scripting.Filesystemobject")  
Set regex = CreateObject("vbscript.regexp")  
regex.Global = False: regex.IgnoreCase = True: regex.MultiLine = True
regex.Pattern = "(Parameter)\s*=\s*(\d+)"  

For Each file In fso.GetFolder(ORDNER).Files
	If LCase(fso.GetExtensionName(file.Name)) = LCase(EXTENSION) Then
		strContent = fso.OpenTextFile(file.Path,1).ReadAll()
		set matches = regex.Execute(strContent)
		If matches.Count > 0 Then
			If CDbl(matches(0).submatches(1)) > 0 Then
				fso.OpenTextFile(file.Path,2).Write(regex.Replace(strContent,"$1 = 0"))  
			End If 
		End If
	End If
Next
MsgBox "Finished"  
Set fso = Nothing
Set regex = Nothing
Grüße Uwe
Member: Endoro
Endoro Dec 17, 2014 at 08:17:43 (UTC)
Goto Top
Hey,
vielfach getestete "Profiscripte" ohne Fremdsoftware:

FindRepl.bat:New regex utility to search and replace strings
JREPL.BAT - regex text processor

Gruß, Endoro
Member: Fantomas741
Fantomas741 Dec 19, 2014 at 11:38:30 (UTC)
Goto Top
Super ich danke euch, werde ich am Wochende mal Testen !!

Gruß
Fanto