Textdatei mit einem Teil des Inhaltes umbenennen
Ich hoffe hier kann mir jemand weiterhelfen, ich google und versuche schon den ganzen Tag, leider ohne Ergebnis.
Mein Problem:
Im Zuge unserer Arbeitsabläufe erhalte ich viele einzelne Textfiles die leider nur mit Documents_Datum_lfdNr.txt abgespeichert werden.
wenn ich eine Datei suche mache ich das im Moment mit der Volltextsuche, das möchte ich aber vereinfachen.
mit
'findstr /N /R /C:"\< [0-9][0-9][0-9] " c:\test\*.txt'
erhalte ich folgende zeile aus dem File retour
c:\test\Documents_03SSEP09_0000234.txt: 257 4792087687 usw.
Ich würde nun gerne die Files auf diese zurückgegeben Nr (257... .txt) umbenennen.
Die NR steht immer in der gleichen Zeile, an der gleichen Position und hat immer die gleiche Länge.
Hat jemand eine Idee, wie man das realisieren kann.
Bitte möglichst einfach antworten, ich kenne mich nicht wirklich gut aus.
Vielen Dank im Vorraus
Andreas
Mein Problem:
Im Zuge unserer Arbeitsabläufe erhalte ich viele einzelne Textfiles die leider nur mit Documents_Datum_lfdNr.txt abgespeichert werden.
wenn ich eine Datei suche mache ich das im Moment mit der Volltextsuche, das möchte ich aber vereinfachen.
mit
'findstr /N /R /C:"\< [0-9][0-9][0-9] " c:\test\*.txt'
erhalte ich folgende zeile aus dem File retour
c:\test\Documents_03SSEP09_0000234.txt: 257 4792087687 usw.
Ich würde nun gerne die Files auf diese zurückgegeben Nr (257... .txt) umbenennen.
Die NR steht immer in der gleichen Zeile, an der gleichen Position und hat immer die gleiche Länge.
Hat jemand eine Idee, wie man das realisieren kann.
Bitte möglichst einfach antworten, ich kenne mich nicht wirklich gut aus.
Vielen Dank im Vorraus
Andreas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 131351
Url: https://administrator.de/forum/textdatei-mit-einem-teil-des-inhaltes-umbenennen-131351.html
Ausgedruckt am: 08.04.2025 um 06:04 Uhr
12 Kommentare
Neuester Kommentar

Salü,
Dann nehme ich dein Gerüst einfach mal....
aber ohne Garantie, dass es auch so läuft
ungetestet
Das sollte funktionieren.
Die umbenamsen.ini und die .log sind zum nachvollziehen, wie die Datei umbenannt wurden. (Falls das mal in die Hose gegangen sein sollte)
edit und denk dran - du wolltest die Leerzeichen in den neuen Dateinamen haben
Gruß
Bitte möglichst einfach antworten, ich kenne mich nicht wirklich gut aus.
Dann nehme ich dein Gerüst einfach mal....
ungetestet
findstr /N /R /C:"\< [0-9][0-9][0-9] " c:\test\*.txt >c:\test\umbenamsen.ini
for /f "Tokens=1,3 delims= :" %%a in (c:\test\umbenamsen.ini) do echo ren "%%a" "%%b.txt">>c:\test\umbenamsen.log
Das sollte funktionieren.
Die umbenamsen.ini und die .log sind zum nachvollziehen, wie die Datei umbenannt wurden. (Falls das mal in die Hose gegangen sein sollte)
edit und denk dran - du wolltest die Leerzeichen in den neuen Dateinamen haben
Gruß

Servus,
bin nur noch 5 minuten da...
aber - ich bin ja nicht der einzige...
Für die anderen einfach mal "genau" aufschreiben - wie die Datei später heissen soll und an einem beispiel festkleben. (bitte ohne usw. - Haarklein)
evtl. ist es dass schon?
Durch das "echo" passiert nix - aber du solltest dort alterdateiname - neuer dateiname mit einem Leerzeichen getrennt - sehen.
Wenn ja - einfach das Echo rausnehmen und das nochmal laufen lassen.
Gruß
bin nur noch 5 minuten da...
aber - ich bin ja nicht der einzige...
Für die anderen einfach mal "genau" aufschreiben - wie die Datei später heissen soll und an einem beispiel festkleben. (bitte ohne usw. - Haarklein)
evtl. ist es dass schon?
for /f "Tokens=1,* delims= :" %%a in (c:\test\umbenamsen.ini) do echo ren "%%a" "%%b.txt">>c:\test\umbenamsen.log
Durch das "echo" passiert nix - aber du solltest dort alterdateiname - neuer dateiname mit einem Leerzeichen getrennt - sehen.
Wenn ja - einfach das Echo rausnehmen und das nochmal laufen lassen.
Gruß
Hallo fidelio und willkommen im Forum!
Wenn nicht nur die Positionen in der Zeile, sondern auch die Nummer der Zeile bekannt sind, sollte das (für alle Dateien) etwa so gehen:
Zu überlegen wäre noch, nur Dateien, deren Name mit "Documents_" beginnt (falls ich das richtig verstanden habe), zu verarbeiten, und daher als "Maske" in Zeile 3 "Documents_*.txt" zu verwenden ...
Noch eine Anmerkung zu den Spaltenangaben: Da der "
Die etwas gewöhnungsbedürftig
aussehende Zeile 21 wird übrigens letztlich zu
aufgelöst.
Grüße
bastla
Wenn nicht nur die Positionen in der Zeile, sondern auch die Nummer der Zeile bekannt sind, sollte das (für alle Dateien) etwa so gehen:
@echo off & setlocal
set "Ordner=C:\Test"
set "Maske=*.txt"
set ZNr=18
set Sp1=9
set L1=3
set Sp2=13
set L2=10
pushd "%Ordner%"
for /f "delims=" %%i in ('dir /b /a-d "%Maske%"') do call :ProcessFile "%%i"
popd
goto :eof
:ProcessFile
set "Zeile="
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" %1^|findstr /b "%ZNr%:"') do set "Zeile=%%j"
if not defined Zeile echo %~1: Nummer nicht gefunden! & goto :eof
call set "NameNeu=%%Zeile:~%Sp1%,%L1%%%%%Zeile:~%Sp2%,%L2%%%"
echo ren %1 "%NameNeu%%~x1"
goto :eof
Noch eine Anmerkung zu den Spaltenangaben: Da der "
set
"-Befehl für das Bilden der Teilstrings die Anzahl der vom Anfang weg zu überspringenden Zeichen benötigt, habe ich zur Vereinfachung für die Position 10 gleich den "Sp1
"-Wert 9 angegeben.Die etwas gewöhnungsbedürftig
set "NameNeu=%Zeile:~9,3%%Zeile:~13,10%"
Grüße
bastla

Moin,
"normalerweise" - gilt ein Beitrag nach einem Bastla Post als gelöst.... von daher und weil er sich - wie immer Mühe gegeben hat - mag ich "eigentlich" nicht mehr "reinpfuschen"
Ich versuches trotzdem mal - nun schonmal grob getestet...
Ich hatte 3 Flüchtigkeitsfehler drin...
Und wenn auch das nicht funkt - wobei das nix umbenennt - sondern nur anzeigt - dann wirklich ein komplettes Beispiel dranhängen.
edit: @Biber - das kommt dann davon - wenn einer nichtumrennen umbennen schreibt.... *flitz*
Gruß
"normalerweise" - gilt ein Beitrag nach einem Bastla Post als gelöst.... von daher und weil er sich - wie immer Mühe gegeben hat - mag ich "eigentlich" nicht mehr "reinpfuschen"
Ich versuches trotzdem mal - nun schonmal grob getestet...
findstr /N /R /C:"\< [0-9][0-9][0-9]" c:\test\*.txt >>c:\test\umbenamsen.ini
for /f "Tokens=1,2,3 delims=:" %%a in (c:\test\umbenamsen.ini) do echo ren "%%a%%b "%%c.txt" >>c:\test\umbenamsen.log
notepad c:\test\umbenamsen.log
Ich hatte 3 Flüchtigkeitsfehler drin...
- 1 das c:\ und delims: ignoriert - daher nun Tokens 1,2,3
- 2 die umbenamsen.ini hatte nur eine Zeile
Und wenn auch das nicht funkt - wobei das nix umbenennt - sondern nur anzeigt - dann wirklich ein komplettes Beispiel dranhängen.
edit: @Biber - das kommt dann davon - wenn einer nicht
Gruß
Hallo fidelio!
Auch ich hatte nicht erwähnt, dass der Befehl zum Umbenennen nicht ausgefüht, sondern nur angezeigt wird - für Deine (um die fehlenden 9 Leerzeichen ergänzte) Testdatei sähe das Ergebnis bei mir so aus:
Anzumerken ist, dass durch das Wechseln des Ordners per "
Wenn Du nach Zeile 13 in meinem Vorschlag oben noch eine Zeile
einfügst (oder, noch besser, Batches grundsätzlich aus einer CMD-Shell heraus testest), solltest Du eigentlich das selbe Ergebnis erhalten ...
Willst Du die Namensänderung gleich durchführen lassen (sind ja vermutlich ohenehin nur Testdateien), genügt es, das "
@timobeil
(die allerdings vermutlich nur von den allergrößten Optimisten geteilt werden kann
).
Grüße
bastla
Auch ich hatte nicht erwähnt, dass der Befehl zum Umbenennen nicht ausgefüht, sondern nur angezeigt wird - für Deine (um die fehlenden 9 Leerzeichen ergänzte) Testdatei sähe das Ergebnis bei mir so aus:
ren "Documents_03SEP09_0000235.txt" "2584792087687.txt"
puhd
" keine Pfadangabe für die Quelldatei aufscheint.Wenn Du nach Zeile 13 in meinem Vorschlag oben noch eine Zeile
pause
Willst Du die Namensänderung gleich durchführen lassen (sind ja vermutlich ohenehin nur Testdateien), genügt es, das "
echo
" am Beginn der Zeile 22 zu entfernen.@timobeil
"normalerweise" - gilt ein Beitrag nach einem Bastla Post als gelöst....
Danke für die Einschätzung Grüße
bastla