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 ('dir /b %COL_LW%\*.csv') do set "Name=%%~ni" & call :2 "%%i"   
echo fertig!!
pause
goto :exit

:2
echo "%COL_LW%\%name%.csv" {{comment_strings:13608119160}}  
rem copy {{comment_strings:21652648841}} {{comment_strings:11126131028}} 
pause
goto :1

:exit

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

Content-Key: 139873

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

Printed on: April 23, 2024 at 22:04 o'clock

Member: bastla
bastla Apr 05, 2010 at 17:28:53 (UTC)
Goto Top
Hallo pbelcl!

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

Grüße
bastla
Member: pbelcl
pbelcl Apr 06, 2010 at 04:58:35 (UTC)
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 "Name=%%~ni" & call :2 "%%i"   
echo "%COL_LW%\%name%.csv" {{comment_strings:1500761095}}  
rem copy "%COL_LW%\%name%.csv" {{comment_strings:13580626912}}  
)

:exit

aber da wird die Variable "Name" nicht umgesetzt ;-(
Member: bastla
bastla Apr 06, 2010 at 06:52:04 (UTC)
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
Member: pbelcl
pbelcl Apr 07, 2010 at 05:38:16 (UTC)
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 ?
Member: bastla
bastla Apr 07, 2010 at 07:04:49 (UTC)
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