fidelio
Goto Top

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

Content-Key: 131351

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

Printed on: April 26, 2024 at 08:04 o'clock

Mitglied: 60730
60730 Dec 09, 2009 at 16:31:54 (UTC)
Goto Top
Salü,

Bitte möglichst einfach antworten, ich kenne mich nicht wirklich gut aus.

Dann nehme ich dein Gerüst einfach mal.... face-wink aber ohne Garantie, dass es auch so läuft

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 face-wink

Gruß
Member: fidelio
fidelio Dec 09, 2009 at 16:34:39 (UTC)
Goto Top
Danke für die schnelle Antwort, ich werde es gleich mal versuchen

LG
andreas
Member: fidelio
fidelio Dec 09, 2009 at 16:40:43 (UTC)
Goto Top
funkt leider so nicht,

in die umbenamsen.ini schreibt er:

c:\test\Documents_03SEP09_0000234.txt:18: 257 4792087687 1 PRI FFVV

die umbenamsen.log wird erstellt, ist aber leer,

das File wird nicht umbenannt

Irgendeine Idee ??
Mitglied: 60730
60730 Dec 09, 2009 at 16:44:27 (UTC)
Goto Top
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) face-wink

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ß
Member: fidelio
fidelio Dec 09, 2009 at 16:54:24 (UTC)
Goto Top
Servus, Leider nein,
Der Dateiname soll 2574792087687.txt lauten, wobei der Name aus dem File C:\test\*.txt kommt
und bei jedem File in der Zeile 18, auf Position 10-12 und 14-23 zu finden ist.

257 4792087687 1 PRI FFVV

Danke
LG
Member: bastla
bastla Dec 09, 2009 at 18:05:47 (UTC)
Goto Top
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:
@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
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 "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 face-wink aussehende Zeile 21 wird übrigens letztlich zu
set "NameNeu=%Zeile:~9,3%%Zeile:~13,10%"
aufgelöst.

Grüße
bastla
Member: fidelio
fidelio Dec 10, 2009 at 09:23:29 (UTC)
Goto Top
hallo Bastla.

Danke für Deine Antwort.

Leider funkt das bei mir auch nicht.
Mitglied: 60730
60730 Dec 10, 2009 at 09:54:51 (UTC)
Goto Top
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" face-wink

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 umrennen umbennen schreibt.... *flitz*

Gruß
Member: fidelio
fidelio Dec 10, 2009 at 10:12:50 (UTC)
Goto Top
OK , im Detail:

die Datei mit der ich teste: C:\test\Documents_03SEP09_0000234.txt

XXXXXXXX AN10250
ETKT AGENT COUPON 00000000 ITINERARY
AUSTRIAN 1 OF 1 X96FG8/1A OOS7275O VIESTR 23NOV
NNNNNNNNN/VVVVVVVVVVV MRS TC OBUYOS
03SEP09 OOS7276O STRVIE 26NOV
OBUYOS
REF REST/NONEND/CHNG RESTR
VIE OS STR35.79OS VIE35.79NUC71.58END ROE0.712358
XT8.00AT5.30RA7.41RA4.07DE


EUR 00.00 EXCH/
EUR 00.00YQ INVOICE
EUR 00.00ZY FCI 0
EUR 00.00XT ORIG ISS/
EUR 000.00
257 4792087687 1 PRI FFVV
7906/


In der vorletzten (18.Zeile) steht die Ticketnummer (2574792087687) die der Dateiname werden soll.

Danke
LG
Andreas
Member: fidelio
fidelio Dec 10, 2009 at 10:15:08 (UTC)
Goto Top
Hallo nochmal,

Ich sehe gerade, dass in der Antwort die Leerzeichen am Anfang der Zeile weggelassen werden.
257 fängt an der 10. Stelle an
Member: bastla
bastla Dec 10, 2009 at 15:37:50 (UTC)
Goto Top
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:
ren "Documents_03SEP09_0000235.txt" "2584792087687.txt"
Anzumerken ist, dass durch das Wechseln des Ordners per "puhd" keine Pfadangabe für die Quelldatei aufscheint.

Wenn Du nach Zeile 13 in meinem Vorschlag oben noch eine Zeile
pause
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 "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 face-smile (die allerdings vermutlich nur von den allergrößten Optimisten geteilt werden kann face-wink).

Grüße
bastla
Member: fidelio
fidelio Dec 11, 2009 at 07:53:25 (UTC)
Goto Top
Hallo Bastla!

Ich muß zu meiner Schande gestehen, dass ich das echo wirklich nicht gesehen habe, wenn man das weg nimmt, geht es gleich viel besser.

Ich muß sagen, ich glaube Timo hat mit seiner Einschätzung recht.

Euch allen vielen, vielen Dank,
ich glaube ohne Euch würde ich noch ein halbes Jahr an dem Ding basteln.

LG
Andreas