Zählschleife
Hallo, ich habe eine ähnliche Frage schonmal gestellt, kann sie aber nicht mehr finden. Ich habe folgenden Quellcode:
Wie man sieht sollen die 4 Schleifen hochgezählt werden, um ein Ergebnis in etwa der folgenden Form zu liefern:
Zeitstempel:
print 'verStrk 1'
--:r ".\Schema\BI_STAMMDATEN_EXCHANGERATES_REVIEW.sql"
print 'neuStrk 1'
--:r ".\Schema\BI_BILLING_HISTORY_INSERT_SELECT.sql"
Zeitstempel:
print 'ChangeNorm 1'
--:r ".\P\BI_BILLING_HISTORY_INSERT.sql"
print 'ChangeNorm 2'
--:r ".\P\BI_BILLING_HISTORY_INSERT_SELECT.sql"
print 'ChangeNorm 3'
--:r ".\P\BI_EPM_IMPORT.sql"
print 'NewNorm 1'
--:r ".\P\BI_STAMMDATEN_PROJECTS_IMPORT_SELECT.sql"
print 'NewNorm 2'
--:r ".\P\BI_STAMMDATEN_PROJECTS_REVIEW.sql"
print 'NewNorm 3'
--:r ".\P\BI_STAMMDATEN_PROJECTS_REVIEW_SELECT.sql"
Zeitstempel:
Allerdings sieht das Ergebnis noch so aus, dass die 1. Schleife 1 mal, die 2. Schleife nicht, aber die 3. und 4. voll durchlaufen werden.
Wie muss der Code entsprechend geändert werden? Bin für jede Hilfe dankbar!
:: Einfügen der Struktur Dateien
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
echo Zeitstempel: >> %HELP_PATH%\install_backend.sql
set anz=0
for /F "skip=1 tokens=1* delims=\" %%i in (%DIFFTOOL_PATH%\veraendertstrukt.txt) do call :zwei %%i\%%j
goto :eins
:eins
set anz=0
for /F "skip=3 tokens=1* delims=\" %%i in (%DIFFTOOL_PATH%\neustrukt.txt) do call :drei %%i\%%j
goto :ENDE
:zwei
set /a anz=%anz%+1
echo print 'verStrk %anz%' >> %HELP_PATH%\install_backend.sql
echo --:r ".\%*" >> %HELP_PATH%\install_backend.sql
goto :ENDE
:drei
set /a anz=%anz%+1
echo print 'NewStrk %anz%' >> %HELP_PATH%\install_backend.sql
echo --:r ".\%*" >> %HELP_PATH%\install_backend.sql
goto :ENDE
echo Zeitstempel: >> %HELP_PATH%\install_backend.sql
:ENDE
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Einfügen der restlichen Dateien
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
echo Zeitstempel: >> %HELP_PATH%\install_backend.sql
set anz=0
for /F "skip=1 tokens=1* delims=\" %%i in (%DIFFTOOL_PATH%\veraendertnorm.txt) do call :count %%i\%%j
goto :weiter
:weiter
set anz=0
for /F "skip=3 tokens=1* delims=\" %%i in (%DIFFTOOL_PATH%\neunorm.txt) do call :zaehl %%i\%%j
goto :EOF
:count
set /a anz=%anz%+1
echo print 'ChangeNorm %anz%' >> %HELP_PATH%\install_backend.sql
echo --:r ".\%*" >> %HELP_PATH%\install_backend.sql
goto :EOF
:zaehl
set /a anz=%anz%+1
echo print 'NewNorm %anz%' >> %HELP_PATH%\install_backend.sql
echo --:r ".\%*" >> %HELP_PATH%\install_backend.sql
goto :EOF
echo Zeitstempel: >> %HELP_PATH%\install_backend.sql
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Wie man sieht sollen die 4 Schleifen hochgezählt werden, um ein Ergebnis in etwa der folgenden Form zu liefern:
Zeitstempel:
print 'verStrk 1'
--:r ".\Schema\BI_STAMMDATEN_EXCHANGERATES_REVIEW.sql"
print 'neuStrk 1'
--:r ".\Schema\BI_BILLING_HISTORY_INSERT_SELECT.sql"
Zeitstempel:
print 'ChangeNorm 1'
--:r ".\P\BI_BILLING_HISTORY_INSERT.sql"
print 'ChangeNorm 2'
--:r ".\P\BI_BILLING_HISTORY_INSERT_SELECT.sql"
print 'ChangeNorm 3'
--:r ".\P\BI_EPM_IMPORT.sql"
print 'NewNorm 1'
--:r ".\P\BI_STAMMDATEN_PROJECTS_IMPORT_SELECT.sql"
print 'NewNorm 2'
--:r ".\P\BI_STAMMDATEN_PROJECTS_REVIEW.sql"
print 'NewNorm 3'
--:r ".\P\BI_STAMMDATEN_PROJECTS_REVIEW_SELECT.sql"
Zeitstempel:
Allerdings sieht das Ergebnis noch so aus, dass die 1. Schleife 1 mal, die 2. Schleife nicht, aber die 3. und 4. voll durchlaufen werden.
Wie muss der Code entsprechend geändert werden? Bin für jede Hilfe dankbar!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 113885
Url: https://administrator.de/forum/zaehlschleife-113885.html
Ausgedruckt am: 06.04.2025 um 09:04 Uhr
17 Kommentare
Neuester Kommentar

Zitat von @Pantherstyle:
Hallo, ich habe eine ähnliche Frage schonmal gestellt, kann sie aber nicht mehr finden.
Hallo, ich habe eine ähnliche Frage schonmal gestellt, kann sie aber nicht mehr finden.
Servus,
Ist bei fast unüberschaubaren 7 Beiträgen aber nun wirklich kein Hexenwerk.
Voila - ging ganz schnell
Vor lauter Wald sehe ich leioder den Baum nicht mehr - aber wundere mich über Zeile 30 & 31:
30. goto :weiter
31.:weiter
Magst du das etwas besser organsieren?
Dann wäre das mit dem Helfen auch schöner.
gruß
Moin Steilpanda,
und als weitere zwei Tipps fürs Gröbste.
Grüße
Biber
und als weitere zwei Tipps fürs Gröbste.
- einzelne CALL :whatever-Blöcke beginnen mit ":blockname" (hast du) und MÜSSEN mit "goto :eof" abgeschlossen werden
- einzige Ausnahme ist ein geCALLter Block, dessen letzte zeile auch gleichzeitig die letze Codezeile des gesamten batches ist - dann kann ein "goto :eof" entfallen
- noch deutlicher gesagt - es darf NICHT alternativ ein "goto :ENDE" oder "goto :Hell" am CALL-Blockende stehen, nur "goto :eof" wird als "kehre zurück zur aufrufenden Batchzeile" interpretiert
- weiterer Tipp: Zeile 21 ist unerreichbar (wird nie ausgeführt), da unmittelbar davor ein unbedingtes "goto :Woanders" steht
Grüße
Biber
Moin Panda,
dann wären das so die Korrekturen, die mir im ersten Anlauf ein- und auffallen:
[ungetestet]
Grüße
Biber
dann wären das so die Korrekturen, die mir im ersten Anlauf ein- und auffallen:
echo off & setlocal
::
:: Dieses tool dient der Erstellung einer Installationsroutine für SQL Dateien
:: und ist im Zusammenhang mit dem Difftool.bat zu verwenden, da dieses die
:: Ausgangstextdateien liefert.
::
:: Angabe der Pfade durch den User
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Pfad zur PrologSqlInstall.txt Datei
set "PROLOG_PATH=C:\Arbeitskopie\trunk\Daten\SoftwarePaket\Batch-Dateien\Difftools"
:: Pfad wo die Ergebnisse angelegt werden sollen
set "HELP_PATH=C:\Arbeitskopie\SqlInstall"
::Pfad zu den Ergebnissen von Difftool
set "DIFFTOOL_PATH=C:\Arbeitskopie\Hilfsordnerbflexxdateien"
Set "newSql=%HELP_PATH%\install_backend.sql"
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Vorbereitung der Pfade
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
rd %HELP_PATH% /s /q
mkdir %HELP_PATH%
echo.> %newSQL%
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Einlesen des Prologs
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
copy %PROLOG_PATH%\PrologSqlInstall.txt %newSQL%
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Einfügen der sql Logik
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
echo. >> %newSQL%
echo print convert(varchar, getdate(), 114)+':Starting installation' >> %newSQL%
echo --go at least >> %newSQL%
echo go >> %newSQL%
echo -- call create function script >>%newSQL%
echo print convert(varchar, getdate(), 114)+' Part 1:' >>%newSQL%
echo -- install all utility function first >>%newSQL%
echo installchanges: -- Sprungziel >>%newSQL%
echo -- Zeitstempel vorher ausgeben >>%newSQL%
echo print convert(varchar, getdate(), 114)+' Part 6: Changing procedures' >>%newSQL%
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
echo Ihre SQL Installationsdatei wird erstellt, Sie finden diese unter:
echo.%newSQL%
echo Bitte fuegen Sie der erstellten Datei folgende CodeZeile als Schlusszeile hinzu
echo print convert(varchar, getdate(), 114)+':Installation done.'
Pause
:: Einfügen der Dateien
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set /a anz=0
for /F "skip=1 tokens=1* delims=\" %%i in (%DIFFTOOL_PATH%\veraendert.txt) do call :count %%i\%%j
REM #Bugfix s.u # hier steht besser kein Goto :LetzteZeile
:weiter
set /a anz=0
for /F "skip=3 tokens=1* delims=\" %%i in (%DIFFTOOL_PATH%\neu.txt) do call :zaehl %%i\%%j
REM #Bugfix s.u # hier steht besser kein goto :EOF
Goto :LetzteZeile
:count
set /a anz=%anz%+1
echo print 'Change %anz%' >>%newSQL%
echo --:r ".\%*" >>%newSQL%
goto :EOF
:zaehl
set /a anz=%anz%+1
echo print 'New %anz%' >>%newSQL%
echo --:r ".\%*" >>%newSQL%
goto :EOF
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Zeitstempel ende
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:LetzteZeile
echo print convert(varchar, getdate(), 114)+':Installation done.' >>%newSQL%
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Grüße
Biber