mttspeedy
Goto Top

Mittels Batch alle .txt Dateien eines Verzeichnises ändern

Ich habe ca. 10.000 TXT-Dateien in einem Verzeichnis und möchte für alle folgendes durchführen:

-> suchen in jeder Datei nach der Zeichenkette "Test" und ersetzen durch "TEST123456"
-> speichern als "[ursprungsname]-1.txt"

Danke die Hilfe

Content-Key: 302821

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

Ausgedruckt am: 28.03.2024 um 11:03 Uhr

Mitglied: Radioflyer
Radioflyer 25.04.2016 aktualisiert um 14:13:44 Uhr
Goto Top
Hi,

@echo off
for %%f in (*.txt) do (
ren "%%~nf%%~xf" "%%~nf 12345%%~xf"
)

oder mit dem BulkRenameUtility, da kannste der parametrisieren, falls Du so was öfter hast...

cheerz, RF
Mitglied: mttspeedy
mttspeedy 25.04.2016 um 14:45:31 Uhr
Goto Top
Dieses löst nur das Renaming. Ich möchte aber im Inhalt der TXT Dateien den String "Test" suchen und durch "Test123456" ersetzen.

Dann die Datei mit geänderten Namen speichern !!
Danke für die Hilfe !!
Mitglied: Friemler
Friemler 25.04.2016 um 19:24:33 Uhr
Goto Top
Hallo erstmal,

das Thema "Suchen und ersetzen mittels Batchscript" ist etwas, was hier schon in allen möglichen Varianten durchgekaut wurde, einfach mal die Forensuche bemühen.

In vielen Fällen kommt es aber zu Problemen, wenn die zu durchsuchende Textdatei, der Suchbegriff oder die Ersetzung irgendwelche Sonderzeichen enthält, die vom Batchscript-Interpreter als Operator, Befehl oder syntaktisches Element betrachtet werden.

Batchscript ist NICHT für Such- und Ersetzungsoperationen in Textdateien geeignet!

Du solltest versuchen, mit PowerShell oder VBScript zu einer Lösung zu kommen, auch dazu finden sich etliche Threads hier im Forum.

Oder verwende fertige Programme dafür:


Grüße
Friemler
Mitglied: 114757
Lösung 114757 25.04.2016 aktualisiert um 20:15:43 Uhr
Goto Top
Powershell:
$search = 'Test'  
$replace = 'TEST12345'  
gci 'C:\Ordner' -Filter *.txt | %{(gc $_.Fullname | out-string).replace($search,$replace) | set-content "$($_.DirectoryName)\$($_.Basename)-1$($_.Extension)"}  
Gruß jodel32
Mitglied: mttspeedy
mttspeedy 26.04.2016 um 08:08:04 Uhr
Goto Top
Hallo, erst einmal vielen Dank für Eure Mühe.

Warum Batch oder Powershell und kein extra Programm: weil es mein Firmenrechner íst und keine anderen Programme zur Verfügung stehen.
Die Probleme des Interpreter sind mir bewusst, es wurde ja in vielen Threads darauf hingewiesen, aber ich suche wirklich nur nach einer Zeichenkette bestehend aus 2 Buchstaben, die ich ersetzen muss.
Die Dateien enthalten keine "&" etc. die als Kommando missverstanden werden könnten.
Ich probiere die Powershell Kommandos heute aus.

In dieser Kombination habe ich beim Suchen nichts gefunden, deshalb meine Frage
Mitglied: mttspeedy
mttspeedy 26.04.2016 um 15:38:06 Uhr
Goto Top
Hallo ich habe das Script jetzt an 2 Dateien ausprobiert. Leider ersetzt es den String nicht, sondern fügt dieses ein....
also aus 'Test' wird dann 'Test12345 Test'
Mitglied: 114757
114757 26.04.2016 aktualisiert um 15:44:07 Uhr
Goto Top
Kann ich nicht bestätigen geht einwandfrei . Achtung, diese Replace Variante ist Case-Sensitive. Es gibt hier auch noch andere Varianten mit Regular-Expressions.
Mitglied: mttspeedy
mttspeedy 26.04.2016 um 16:25:29 Uhr
Goto Top
Ich habe meinen Denkfehler... die Zeichenkette "Test" ist das Suchkriterium, aber ich will natürlich nicht nur "Test" ersetzen, sondern die 15 folgenden Zeichen nach Test mit, wobei ich diese nicht kenne..... Dein Powershell macht genau, dass was ich geschrieben habe, das war mein Fehler
Wie sind die Operatoren für $search´ dann *?
Mitglied: 114757
Lösung 114757 26.04.2016 aktualisiert um 16:58:20 Uhr
Goto Top
Zitat von @mttspeedy:

Ich habe meinen Denkfehler... die Zeichenkette "Test" ist das Suchkriterium, aber ich will natürlich nicht nur "Test" ersetzen, sondern die 15 folgenden Zeichen nach Test mit, wobei ich diese nicht kenne..... Dein Powershell macht genau, dass was ich geschrieben habe, das war mein Fehler
Wie sind die Operatoren für $search´ dann *?
Dann mach es stattdessen direkt über Regular Expressions dann bist du super flexibel
$search = 'Test.{15}'  
$replace = 'TEST12345'  
gci 'C:\Ordner' -Filter *.txt | %{(gc $_.Fullname | out-string) -replace $search,$replace | set-content "$($_.DirectoryName)\$($_.Basename)-1$($_.Extension)"}  
Regular Expressions Tutorial
Mitglied: mttspeedy
mttspeedy 27.04.2016 um 09:56:18 Uhr
Goto Top
Super das passt, auch das Tutorial ist sehr gut.