Batch-Prog führt echo 4x aus
Hallo, erstmal!
Könnt Ihr euch mal meinen Quellcode mal anschauen. Liegt wahrscheinlich an den For-Schleifen. Mein echo-Befehl wird immer 4x ausgeführt, finde dazu aber keine Lösung. Könnt Ihr mir bitte helfen?
Könnt Ihr euch mal meinen Quellcode mal anschauen. Liegt wahrscheinlich an den For-Schleifen. Mein echo-Befehl wird immer 4x ausgeführt, finde dazu aber keine Lösung. Könnt Ihr mir bitte helfen?
echo off
rem set profil=%1
set profil=frank
set pfad_lokal=D:\%profil%\lokal.dat
set pfad_server=D:\%profil%\server.dat
for /f "delims=" %%i in ('dir %pfad_lokal% /s /b /a-d') do call :splitDateLokal %%~ti
:splitDateLokal
for /f "tokens=1-5 delims=.:," %%a in ("%1.%2") do (
set TT_L=%%a
Set MM_L=%%b
Set JJ_L=%%c
Set hh_L=%%d
Set mi_L=%%e
)
for /f "delims=" %%i in ('dir %pfad_server% /s /b /a-d') do call :splitDateServer %%~ti
:splitDateServer
for /f "tokens=1-5 delims=.:," %%a in ("%1.%2") do (
set TT_S=%%a
Set MM_S=%%b
Set JJ_S=%%c
Set hh_S=%%d
Set mi_S=%%e
)
set zeitlokal=%TT_L%%MM_L%%JJ_L%%hh_L%%mi_L%
rem set zeitserver=%TT_S%%MM_S%%JJ_S%%hh_S%%mi_S%
echo %zeitlokal%
rem echo %zeitserver%
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 113930
Url: https://administrator.de/contentid/113930
Ausgedruckt am: 05.11.2024 um 12:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo deb10er0 und willkommen im Forum!
Da Du Unterprogramme aufrufst, musst Du auch dafür sorgen, dass diese, aber auch das Hauptprogramm, ordnungsgemäß (mit einem
Das letzte "goto :eof" ist zwar entbehrlich (da dies nach der letzten Batchzeile automatisch ausgeführt wird), aber es schadet nicht, und wenn Du noch weitere Unterprogramme hinzufügen solltest, benötigst Du es auf jeden Fall ...
Grüße
bastla
Da Du Unterprogramme aufrufst, musst Du auch dafür sorgen, dass diese, aber auch das Hauptprogramm, ordnungsgemäß (mit einem
goto :eof
) abgeschlossen werden:echo off & setlocal
rem set profil=%1
set profil=frank
set pfad_lokal=D:\%profil%\lokal.dat
set pfad_server=D:\%profil%\server.dat
for /f "delims=" %%i in ('dir %pfad_lokal% /s /b /a-d') do call :splitDateLokal %%~ti
for /f "delims=" %%i in ('dir %pfad_server% /s /b /a-d') do call :splitDateServer %%~ti
set zeitlokal=%TT_L%%MM_L%%JJ_L%%hh_L%%mi_L%
rem set zeitserver=%TT_S%%MM_S%%JJ_S%%hh_S%%mi_S%
echo %zeitlokal%
rem echo %zeitserver%
::Ende Hauptprogramm
goto :eof
:splitDateLokal
for /f "tokens=1-5 delims=.:," %%a in ("%1.%2") do (
set TT_L=%%a
Set MM_L=%%b
Set JJ_L=%%c
Set hh_L=%%d
Set mi_L=%%e
)
goto :eof
:splitDateServer
for /f "tokens=1-5 delims=.:," %%a in ("%1.%2") do (
set TT_S=%%a
Set MM_S=%%b
Set JJ_S=%%c
Set hh_S=%%d
Set mi_S=%%e
)
goto :eof
Grüße
bastla
Moin deb10er0,
willkommen in Forum.
Ich hab es zufällig gerade vorhin hier in einem anderen Beitrag gelesen:
for /f "delims=" %%i in ('dir %pfad_lokal% /s /b /a-d') do call :splitDateLokal %%~ti
:splitDateLokal
...
eine Sprung/goto :eof-Anweisung VOR die folgende Sprungmarke.
Sonst werden diese zeilen einfach auch noch ausgeführt
(eine Zeile nach der anderen, bis das Ende des Batches erreicht ist)
<code type = "plain">....{Beispiel WENIGER FALSCH}
for /f "delims=" %%i in ('dir %pfad_lokal% /s /b /a-d') do call :splitDateLokal %%~ti
: goto :Eof
REM ~~~~ hier ist der Batch logisch am Ende;
REM ~~~~ es folgen nur noch Unter-Routinen
:splitDateLokal
...
Grüße
Biber
[Edit] Hätte mich auch gewundert, wenn ich vor bastla zu Ende getippt hätte... [/Edit]
willkommen in Forum.
Ich hab es zufällig gerade vorhin hier in einem anderen Beitrag gelesen:
- mit "call :whatever" aufgerufene Blöcke werde explizit beendet mit der Anweisung "goto :eof" in ihrer letzten Zeile
- ebenso muss nach einer Anweisung, auf die eine zeile mit Sprungmarke folgt
for /f "delims=" %%i in ('dir %pfad_lokal% /s /b /a-d') do call :splitDateLokal %%~ti
:splitDateLokal
...
eine Sprung/goto :eof-Anweisung VOR die folgende Sprungmarke.
Sonst werden diese zeilen einfach auch noch ausgeführt
(eine Zeile nach der anderen, bis das Ende des Batches erreicht ist)
<code type = "plain">....{Beispiel WENIGER FALSCH}
for /f "delims=" %%i in ('dir %pfad_lokal% /s /b /a-d') do call :splitDateLokal %%~ti
: goto :Eof
REM ~~~~ hier ist der Batch logisch am Ende;
REM ~~~~ es folgen nur noch Unter-Routinen
:splitDateLokal
...
Grüße
Biber
[Edit] Hätte mich auch gewundert, wenn ich vor bastla zu Ende getippt hätte... [/Edit]