halperimre
Goto Top

Umbenennen von TXT Dateien aus Inhalt von dieser TXT Datei

Sehr geehrtes Administrator-Team!
Sehr geehrte User!

Da ich neu hier bin weiß ich nicht so recht ob ich hier im richtigen Unterforum gelandet bin!
Ich benutze Tekla Structures was ein leistungsstarkes Programm für 3D-Konstruktion ist.
Mit diesem Programm kann ich .nc Daten erzeugen die ich dann zur Weiterverarbeitung meiner CNC-Maschine umbenennen muß!
Das Problem ist das die CNC-Maschine über ein anderes Programm die Daten eingegeben werden welche .nc Dateien verwenden.
Dieses Programm zeigt mir aber nicht Stückzahl und Blechstärke und ich muß deshalb in langen Listen nach Dateiname suchen damit ich weiß wieviel Stück und welche Blechstärke ich benötige.

Meine Datei heißt: VS_8.nc
und der Inhalt ist folgender:
ST
** VS_8.nc
239/2008
11
VS/8
VS/8
S235JRG2
12
FL25*250
B
354.23
250.00
25.00
25.00
25.00
0.00
200.000
2.367
-4.768
-0.004
0.000
0.000


AK
v 0.00u 0.00 0.00 0.00 0.00 0.00 0.00
354.21 0.00 0.00 0.00 0.00 0.00 0.00
354.23 250.00 0.00 0.00 0.00 0.00 0.00
314.23 250.00 0.00 0.00 0.00 0.00 0.00
16.18 193.99 0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00
BO
v 53.71s 50.16 29.00
v 60.69s 129.86 29.00
EN

Nun möchte ich das meine Datei VS_8_12stk_25.00mm.nc heißt.

Der Wert 12 kommt aus Zeile 8 und es müßte noch Stk hinzugefügt werden
Der Wert 25.00 kommt aus Zeile 13 und es müßte noch mm hinzugefügt werden.

Da ich Tekla nicht dazubewegen kann das es stückzahl und blechstärke hinzufügt zum Dateinamen, dachte ich mir das dies vielleicht über ein Batchprogramm bewerkstelligt werden könnte!
Da ich zeitweise über 100 Dateien zu bearbeiten habe ist dies sehr mühsam!


Vielen Dank im voraus für eure Bemühungen

Content-ID: 100095

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

Ausgedruckt am: 26.11.2024 um 00:11 Uhr

bastla
bastla 23.10.2008 um 20:09:21 Uhr
Goto Top
Hallo sehr geehrter Halperimre und willkommen im völlig richtigen Zweig des Forums! face-wink

Der folgende Batch sollte, zum Testen, die Umbenenn-Vorgänge nur anzeigen - wenn das Ergebnis vernünftig aussieht, das "echo" (Zeile 6) vor dem "ren" entfernen, um tatsächlich die Dateinamen ändern zu lassen:
@echo off & setlocal enabledelayedexpansion
pushd "D:\NC-Files"  
for /f "delims=" %%i in ('dir /b /a-d *.nc') do (  
    set M=
    for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%%i"^|findstr /b "8: 13:"') do set "M=!M!#%%b"  
    for /f "tokens=1-2 delims=#" %%a in ("!M!") do echo ren "%%i" "%%~ni_%%astk_%%bmm%%~xi"  
)
popd
Noch zwei Hinweise:
  • Sollte im Ordner- oder Dateinamen ein "!" enthalten sein, müsste eine andere Vorgangsweise gewählt werden.
  • Falls in den relevanten Zeilen 8 und 13 der Datei das Zeichen "#" vorkommen könnte, müsste dieses Zeichen in den Batch-Zeilen 5 und 6 durch ein anderes Zeichen, etwa "$", ersetzt werden.

Grüße
bastla

[Edit] Trennzeichen auf "#" geändert [/Edit]
[Edit2] Schleife für Dateien auf "for /f" geändert, um mehrfaches Umbenennen zu vermeiden [/Edit2]
Halperimre
Halperimre 24.10.2008 um 07:15:16 Uhr
Goto Top
Sehr geehrter Herr Bastla!

Ihre Batch Datei funktioniert einwandfrei!
Sie haben mir dadurch viele Stunden Arbeit genommen!
Da die Dateinamen immer gleich aufgebaut sind z.B. XX_1234.nc sind Ihre zwei Hinweise nicht relevant für mich!
Ich weiß nicht wie ich mich bei Ihnen bedanken soll, aber trotzdem vielen tausend Dank!

mfg Halperimre
Masterofdwc
Masterofdwc 11.02.2009 um 09:59:00 Uhr
Goto Top
Hallo,

wie müsste der Code aussehen, wenn ich nichts an den Dateinamen anhängen will, sondern nur einen gewissen teil herausfiltern will.

Zu Verdeutlichung:
In meiner Datei (Die immer anders heißt) steht in Zeile 1:
B0012300339709022009

für mich sind die 4 Zahlen nach der 8ten Stelle wichtig. Also in dem Fall "3397"

Das Skript soll mir jetzt also die Datei, in der diese Zeile steht nach "3397.txt" umbenennen.

Komplikation dabei ist noch, dass mehrere Dateien in diesem verzeichnis sind, die alle auf diese Art und Weise abgearbeitet werden müssen.

Hab schon versucht im obigen Code ein %a:~-12,4% mit rein zu bringen. Aber ich kriegs nicht hin.

Für eine kleine HIlfestellung wäre ich dankbar.
bastla
bastla 11.02.2009 um 19:58:42 Uhr
Goto Top
Hallo Masterofdwc!

Eine Stringzerlegung ist leider mit Laufvariablen einer "for"-Schleife nicht möglich - daher eher so:
@echo off & setlocal enabledelayedexpansion
pushd "D:\NC-Files"  
for /f "delims=" %%i in ('dir /b /a-d *.nc') do (  
    set /p Zeile=<"%%i"  
    set "Wert=!Zeile:~8,4!  
    echo !Wert!
)
popd
Damit der Variableninhalt (= erste Zeile der jeweiligen Datei) von %Zeile% innerhalb der "for"-Schleife auch wieder gelesen und verwendet werden kann, muss "delayedExpansion" (oder ein Unterprogramm) verwendet werden - im Beispiel oben ist es Ersteres, wodurch sich die Schreibweise von %Zeile% auf !Zeile! verändert.

Grüße
bastla
Masterofdwc
Masterofdwc 09.03.2009 um 07:39:54 Uhr
Goto Top
Da wär ich nie drauf gekommen.

Danke sehr. Funktioniert.