pbelcl
Goto Top

Batchdatei während dem kopieren umbenennen

Hi Leute,

Hab mal wieder eine Aufgabe die ich nicht komplett alleine lösen kann ;-(
Ich möchte beim Kopieren Dateien von:

10040400.csv
in
2010_04_04_00.csv

auf dem Zieldatenträger umbenennen
Dazu hab ich hier mal rumgestöbert und Dateinamen einlesen, auftrennen, umsortieren ... Datei umbenennen gefunden, der schon sehr hilfreich war!
Leider klappt mein Code noch nicht besonders! Das Variablen Handling läuft schon, aber die Datei läuft irgendwie in einer Endlosschleife !?

hier mal der Code:
@echo off
cls

SET "Z_V=p:\daten\1 - Navi Aufzeichnungen\!NEUE Logs"  
set COL_LW=y:

:1
for /f "delims=" %%i in ({{comment_strings:23500274936}}) do set "Name=%%~ni" & call :2 "%%i"   
echo fertig!!
pause
goto :exit

:2
echo "%COL_LW%\%name%.csv" "%Z_V%\20%Name:~0,2%_%Name:~2,2%_%Name:~4,2%_%Name:~6,20%.csv"  
rem copy "%COL_LW%\%name%.csv" "%Z_V%\20%Name:~0,2%_%Name:~2,2%_%Name:~4,2%_%Name:~6,20%.csv"  
pause
goto :1

:exit

Hat mal jemand einen Tipp, was ich da noch falsch mache?

Content-ID: 139873

Url: https://administrator.de/forum/batchdatei-waehrend-dem-kopieren-umbenennen-139873.html

Ausgedruckt am: 23.12.2024 um 07:12 Uhr

bastla
bastla 05.04.2010 um 19:28:53 Uhr
Goto Top
Hallo pbelcl!

Ersetze einfach "goto :1" durch "goto :eof"

Grüße
bastla
pbelcl
pbelcl 06.04.2010 um 06:58:35 Uhr
Goto Top
Danke Bastla!!

War ja nur eine Kleinigkeit.
Hab noch eine anschliessende Frage:

goto :eof

ist meiner Meinung nach das Ende des Files, oder?
Ich habe noch weitere Funktionen da unten dran die natürlich nicht bei jedem FIle das kopiert wird durchgeführt werden müssen.
Wo kann ich das batch statt eof hinspringen lassen, damit es NUR die Schleife mehrmals macht?

Ich hab schon so ausprobiert:

@echo off
cls

SET "Z_V=p:\daten\1 - Navi Aufzeichnungen\!NEUE Logs"  
set COL_LW=y:

:1
for /f "delims=" %%i in ('dir /b %COL_LW%\*.csv') do (  

set {{comment_strings:14010388666}} & call :2 "%%i"   
echo "%COL_LW%\%name%.csv" "%Z_V%\20%Name:~0,2%_%Name:~2,2%_%Name:~4,2%_%Name:~6,20%.csv"  
rem copy "%COL_LW%\%name%.csv" "%Z_V%\20%Name:~0,2%_%Name:~2,2%_%Name:~4,2%_%Name:~6,20%.csv"  
)

:exit

aber da wird die Variable "Name" nicht umgesetzt ;-(
bastla
bastla 06.04.2010 um 08:52:04 Uhr
Goto Top
Hallo pbelcl!

Jedes Unterprogramm ist mit "goto :eof" zu beenden (außer, es folgten danach überhaupt keine Batchzeilen mehr, aber sogar dann schadet's zumindest nicht) - damit wird der Befehl zum "Rücksprung" in das Hauptprogramm gegeben.

Wenn Du im Hauptprogramm "goto :eof" einsetzt, wird der Batch beendet. Soll es also unterhalb des Unterprogrammes noch Zeilen geben, die zum Hauptprogramm gehören, kannst Du - wie Du es oben mit "goto :exit" ja schon gemacht hast, im Hauptprogramm an diese Stelle springen.

Sollte es erforderlich sein, aus einem Unterprogramm ein weiteres Unterprogramm aufzurufen, dann gelten die gleichen Regeln - das Unter-Unterprogramm muss also ebenfalls einfach mit "goto :eof" beendet werden.

Grüße
bastla
pbelcl
pbelcl 07.04.2010 um 07:38:16 Uhr
Goto Top
nur um es zu verinnerlichen:

das heißt reinspringen mit call :2 (oder andere Sprungadresse)
und rausspringen mit gogo :eof damit es weitergeht in der Zeile NACH dem einsprung.

Richtig soweit ?
bastla
bastla 07.04.2010 um 09:04:49 Uhr
Goto Top
Hallo pbelcl!

Unterprogramme werden in Batch auch nicht schneller fertig, wenn Du sie mit
gogo :eof
anfeuerst face-wink - aber ansonsten wäre der Plan grundsätzlich wie von Dir beschrieben (außer, dass es mit der Anweisung nach dem Aufruf weiter geht - aber die wird ohnehin sehr oft in einer neuen Zeile stehen) ...

Grüße
bastla