didie08
Goto Top

For Schleife mit Datei umbenennung

Nach längerem suchen, auch in diesem Forum bin ich leider zu keiner funktionierenden Lösung für mein Problem gekommen.

Ich möchte per Batch ein Programm ausführen das mir Datei Formate umwandelt.
Dabei sollen neben der Datei - Endung auch die 4 hinteren Zeichen des Datei Namens umbenannt werden.

Beispiel "Z:\Tempdaten\503\503251-3-part.prt" wird zu "Z:\Tempdaten\503\503251-3-step.stp"

Bei meiner .exe ist -i=<Input> und -o=<output>

Meine bisherigen bemühungen sehen so aus. Ich schaffe es einfach nicht den geänderten Namen für den output zu bekommen.

dir %inputpath%\*.prt /S /B>d:\temp\part-list.txt

setlocal enabledelayedexpansion
for /f "tokens=* delims= " %%i in (d:\temp\part-list.txt) do (  
set "stpname=%%i" & echo !stpname:~0,-8!>d:\temp\stpname.txt  
SET /p variable=<d:\temp\stpname.txt

%STEP203UG_DIR%\step203ug.exe -i="%%i" -o="%variable%step.stp" -d=%definitions_file% -l="d:\temp\%%~ni.log"  

)

Kann mir jemand helfen?


Gruß
didie08

Content-ID: 179472

Url: https://administrator.de/forum/for-schleife-mit-datei-umbenennung-179472.html

Ausgedruckt am: 22.12.2024 um 22:12 Uhr

bastla
bastla 24.01.2012 um 17:18:53 Uhr
Goto Top
Hallo didie08!

Soferne der Aufbau der Dateinamen immer dem selben Schema (#####-#-part.prt) folgt (und es im Pfad weder "-" noch "." gibt), sollte doch eigentlich
for /f "tokens=1-4 delims=-." %%i in ('dir /s/b "%inputpath%\*-*-part.prt') do echo %STEP203UG_DIR%\step203ug.exe -i="%%i-%%j-%%k.%%l" -o="%%i-%%j-step.stp" -d=%definitions_file% -l="d:\temp\%%~ni-%%j-%%k.log"
genügen (ungetestet).

Zum gefahrlosen Testen steht nach dem "do" ein "echo" ...
[Edit] Dein eigener Ansatz (auf das Nötigste reduziert) könnte etwa so funktionieren:
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir "%inputpath%\*.prt" /S /B') do (  
    set "stpname=%%i" & set "variable=!stpname:~0,-8!"  
    %STEP203UG_DIR%\step203ug.exe -i="%%i" -o="%variable%step.stp" -d=%definitions_file% -l="d:\temp\%%~ni.log"  
)
[/Edit]

Grüße
bastla
sebezahn
sebezahn 24.01.2012 um 19:49:06 Uhr
Goto Top
Hi,

ich habe es nicht ausprobiert, daher bitte vorher eine Kopie machen:


ren Z:\Tempdaten\503\*part.prt" wird zu "Z:\Tempdaten\503\*step.stp"


Eigentlich sollte das gehen, oder? Ich habe es allerdings noch nicht ausprobiert...
Sebezahn
didie08
didie08 25.01.2012 um 09:04:01 Uhr
Goto Top
Hallo bastla und Sebezahn

Vielen Dank für eure Hilfe.

@bastla

Dein Lösungsvorschlag funktioniert. Nur habe ich hier das Problem, dass weiter vorne im Pfad weitere "-" auftauchen können. Dann funktioniert das ganze nicht mehr.

Bei der Hilfe die du mir für meinen eigenen Ansatz gegeben hast, wird leider die %valiable% immer noch nicht aufgelöst. Fällt die da noch was ein?

@sebezahn

Der ren Befehl hatte ich auch schon probiert. Der geht aber nicht. Es kommt ein Syntaxfehler.

Gruß
dide08
bastla
bastla 25.01.2012 um 09:14:09 Uhr
Goto Top
Hallo didie98!
Bei der Hilfe die du mir für meinen eigenen Ansatz gegeben hast, wird leider die %valiable% immer noch nicht aufgelöst. Fällt die da noch was ein?
Ja - ich könnte es zur Abwechslung mal richtig machen face-confused
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir "%inputpath%\*.prt" /S /B') do (  
    set "stpname=%%i" & set "variable=!stpname:~0,-8!"  
    %STEP203UG_DIR%\step203ug.exe -i="%%i" -o="!variable!step.stp" -d=%definitions_file% -l="d:\temp\%%~ni.log"  
)
das Problem, dass weiter vorne im Pfad weitere "-" auftauchen können.
ließe sich mit einer zweiten "for"-Schleife (die ich vorerst vermeiden wollte) eliminieren - weiterhin ungetestet dann so:
for /f "delims=" %%a in ('dir /s/b "%inputpath%\*-*-part.prt') do (  
    for /f "tokens=1-2 delims=-" %%i in ("%%~na") do echo %STEP203UG_DIR%\step203ug.exe -i="%%a" -o="%%~dpa%%i-%%j-step.stp" -d=%definitions_file% -l="d:\temp\%%~na.log"  
)
BTW:
Der ren Befehl hatte ich auch schon probiert. Der geht aber nicht. Es kommt ein Syntaxfehler.
Ein Umbenennen scheint ja auch nicht zielführend, wenn Du den alten und den neuen Namen benötigst ...

... ansonsten: Bei "ren" darf die Angabe des neuen Namens keinen Pfad beinhalten.

Grüße
bastla
sebezahn
sebezahn 25.01.2012 um 09:29:52 Uhr
Goto Top
Hi,

ok, einen Syntaxfehler bekomme ich nicht, aber auch nicht den gewünschten Dateinamen. Dennoch funktioniert es, WENN der erste Teil immer die gleiche Länge hat. Dann kannst du folgendes machen:


Datei 503251-3-part.prt soll werden 503251-3-step.stp

der Befehl lautet dann:

ren ?????????part.prt ?????????step.stp

eventuell kannst du dann eine Batch machen:

ren ?part.prt ?step.stp
ren ??part.prt ??step.stp
ren ???part.prt ???step.stp

und so weiter...
Viel Erfolg,
Sebezahn
didie08
didie08 25.01.2012 um 09:59:01 Uhr
Goto Top
Hi

@bastla

Super.
Beide Lösungen funktionieren nun. Jetzt habe ich die Qual der Wahl.
Ich denke ich muss mich mal schlau machen was das !...! in einer For Schleife macht.

vielen Dank

@sebezahn

Ach danke für deine Hilfe

Die Länge der Dateinamen und des Pfads können varieren. Deshalb scheidet "ren" wohl aus.

Gruß
didie08
bastla
bastla 25.01.2012 um 10:06:49 Uhr
Goto Top
Hallo didie08!

Freut mich, wenn's jetzt passt ... face-smile
Ich denke ich muss mich mal schlau machen was das !...! in einer For Schleife macht.
Schau Dir mal Tutorial zur FOR-Schleife an ...

... ansonsten als Kurzfassung: "delayedexpansion" wird mit der Schreibweise "!variable!" anstelle von "%variable%" erst tatsächlich ausgeführt und nur so ist es möglich, in einer Schleife erstellte / veränderte Variablen dann auch gleich innerhalb dieser Schleife zu verwenden ...

Grüße
bastla