pantherstyle
Goto Top

Durchlaufzähler in for-Schleife

Hallo,
ich möchte eine for-Schleife basteln, welche mir den aktuellen Durchlauf angeben kann, damit folgendes Format erreicht werden kann:

print 'Change 1'
--:r ".\BI_OIVERFICATION_REP_CREATE.sql"
print 'Change 2'
--:r ".\BI_OIVERFICATION_REP_CSVARCRRC_GENERATE.sql"
print 'Change 3'
--:r ".\BI_OIVERFICATION_REP_CSV_GENERATE.sql"

Wie man sieht wird der aktuelle Durchlauf für Change 1-3 benötigt (unbekannt viele durchläufe möglich).
ich habe ja gehofft, dass es im folgenden Format irgendwie möglich wäre aber es hat nicht gefunzt:

set anzahl=0
for /F "skip=1 tokens=1* delims=\" %%i IN (%DIFFTOOL_PATH%\neu.txt) DO (  
set anzahl=+1
echo %anzahl%
)

Wie könnte ich das besser umsetzen?

Content-Key: 112931

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

Ausgedruckt am: 29.03.2024 um 06:03 Uhr

Mitglied: Pantherstyle
Pantherstyle 01.04.2009 um 10:10:42 Uhr
Goto Top
Hier nochmal die genaue Umsetzung von dem was geplant ist:
for /F "skip=3 tokens=1* delims=\" %%i IN (%DIFFTOOL_PATH%\neu.txt) DO (  
echo print 'New 1' >> %HELP_PATH%\install_backend.sql  
echo --:r "%%j" >> %HELP_PATH%\install_backend.sql  
)

Dabei bleibt das Problem mit dem Durchnummerieren bestehen. Der aktuelle Durchlauf soll hinter das New gesetzt werden.

Ich hoffe dass mir da einer helfen kann ....
Mitglied: godlie
godlie 01.04.2009 um 12:49:27 Uhr
Goto Top
Naja wie wärs mit sowas hier:
@echo off
set anz=0
for /F %%i in ('dir /b') do call :count %%i  
pause
goto :EOF

:count
set /a anz=%anz%+1
echo print 'Change %anz%'  
echo --:r".\%*"  
goto :EOF

das problem das du hier natürlich hast, ist wenn in einem Dateinamen ein & oder ein Leerzeichen vorkommt stolpert das teil,
weil bei der Übergabe an count das %%i nicht unter "" steht und dadurch die Leerzeichen und & nicht richtig übergeben werden.
Mitglied: Pantherstyle
Pantherstyle 01.04.2009 um 12:59:17 Uhr
Goto Top
Ich kann das nicht ganz nachvollziehen, da ich auch die Sprungmarke EOF nicht finden kann.

Hier nochmal mein eingesetzter Code
set anz=0 
for /F "skip=1 tokens=1* delims=\" %%i in (%DIFFTOOL_PATH%\veraendert.txt) do (  
call 
:count %%i
goto :EOF
:count
set /a anz=%anz%+1 
echo print 'Change %anz%'  
echo --:r".\%*"  
goto :EOF
) 
Mitglied: godlie
godlie 01.04.2009 um 13:01:21 Uhr
Goto Top
EOF = End Of File...

du hast das ein wenig falsch verstanden:

set anz=0 
for /F "skip=1 tokens=1* delims=\" %%i in (%DIFFTOOL_PATH%\veraendert.txt) do call :count %%i  
goto :EOF

:count
set /a anz=%anz%+1 
echo print 'Change %anz%'  
echo --:r".\%*"  
goto :EOF
Mitglied: Pantherstyle
Pantherstyle 01.04.2009 um 13:20:50 Uhr
Goto Top
Allerdings wie soll er mir das nachh oben zählen, wenn er gleich beim ersten durchlauf zum Ende geht und aufhört? könntest du bitte einen syntaktisch richtigen code posten, damit ich es auch verstehe ;D
Mitglied: godlie
godlie 01.04.2009 um 13:22:20 Uhr
Goto Top
das goto :EOF macht er ja erst nachdem der die Schleife durch hat.
Mitglied: Pantherstyle
Pantherstyle 01.04.2009 um 13:28:22 Uhr
Goto Top
Vielleicht reden wir etwas aneinander vorbei darum nochmal etwas genauer.

ich habe bis jetzt folgenden Code:
for /F "skip=3 tokens=1* delims=\" %%i IN (%DIFFTOOL_PATH%\neu.txt) DO (  
echo print 'New 1' >> %HELP_PATH%\install_backend.sql  
echo --:r "%%j" >> %HELP_PATH%\install_backend.sql  
)

Dieser führt zu einer Ausgabe wie dieser:

print 'New 1'
--:r "convertDateToRnr.sql "
print 'New 1'
--:r "getInvoiceDocName.sql "
print 'New 1'
--:r "UTIL_convertToFloat.sql "
print 'New 1'
--:r "BI_EPM_IMPORT_ERRORS.sql "
print 'New 1'
--:r "BI_EPM_SAP_IMPORT.sql "
etc.......

Allerdings möchte ich, dass er mir eine Ausgabe wie die folgende liefert:

print 'New 1'
--:r "convertDateToRnr.sql "
print 'New 2'
--:r "getInvoiceDocName.sql "
print 'New 3'
--:r "UTIL_convertToFloat.sql "
print 'New 4'
--:r "BI_EPM_IMPORT_ERRORS.sql "
print 'New 5
--:r "BI_EPM_SAP_IMPORT.sql "

etc.....

Wie könnte ich das denn gescheit umsetzen?
Mitglied: godlie
godlie 01.04.2009 um 13:40:58 Uhr
Goto Top
das steht in meinem vorletzten post.
Mitglied: Pantherstyle
Pantherstyle 01.04.2009 um 14:03:28 Uhr
Goto Top
Sorry hab ich wohl falsch verstanden. Jetzt funktioniert eine Schleife nach dem Prinzip. Allerdings verheddert sich die 2. in eine Endlosschleife:
set anz=0
for /F "skip=1 tokens=1* delims=\" %%i in (%DIFFTOOL_PATH%\veraendert.txt) do call :count %%j  
goto :weiter
:count
set /a anz=%anz%+1
echo print 'Change %anz%' >> %HELP_PATH%\install_backend.sql  
echo --:r".\%*" >> %HELP_PATH%\install_backend.sql  
:weiter

set anz=0
for /F "skip=3 tokens=1* delims=\" %%i in (%DIFFTOOL_PATH%\neu.txt) do call :zaehl %%j  
goto :erneut
:zaehl
set /a anz=%anz%+1
echo print 'New %anz%' >> %HELP_PATH%\install_backend.sql  
echo --:r".\%*" >> %HELP_PATH%\install_backend.sql  
:erneut

Wo liegt da der Fehler?
Mitglied: godlie
godlie 01.04.2009 um 14:07:15 Uhr
Goto Top
Zeile 17 entfernen.
Zeile 12 goto :EOF
oder goto weglassen
Mitglied: Pantherstyle
Pantherstyle 01.04.2009 um 14:11:38 Uhr
Goto Top
Zeile 17 entfernt und Zeile 12 goto :EOF

Trotzdem Endlosschleife

set anz=0
for /F "skip=1 tokens=1* delims=\" %%i in (%DIFFTOOL_PATH%\veraendert.txt) do call :count %%j  
goto :weiter
:count
set /a anz=%anz%+1
echo print 'Change %anz%' >> %HELP_PATH%\install_backend.sql  
echo --:r".\%*" >> %HELP_PATH%\install_backend.sql  
:weiter

set anz=0
for /F "skip=3 tokens=1* delims=\" %%i in (%DIFFTOOL_PATH%\neu.txt) do call :zaehl %%j  
goto :EOF
:zaehl
set /a anz=%anz%+1
echo print 'New %anz%' >> %HELP_PATH%\install_backend.sql  
echo --:r".\%*" >> %HELP_PATH%\install_backend.sql  
Mitglied: godlie
godlie 01.04.2009 um 14:17:57 Uhr
Goto Top
hm probiers mal mit einem goto :EOF bei Zeile 17
ansonsten brauch ich die testdateien mal damit cih das nachstellen kann.
Mitglied: Pantherstyle
Pantherstyle 01.04.2009 um 14:26:19 Uhr
Goto Top
geht au nich richtig.

veraendert.txt enthält:
FN\UTIL_isFileExistent.sql
FN\ACMConvertDate.sql
FN\BfxFctMasterGetOption.sql
FN\zZz.txt
FN\UTIL_getDatePart.sql
FN\UTIL_getFilename.sql
P\UTIL_getErrorInfo.sql

neu.txt enthält:
FN\convertDateToRnr.sql
FN\getInvoiceDocName.sql
FN\UTIL_convertToFloat.sql
P\BI_EPM_IMPORT_ERRORS.sql
P\BI_EPM_SAP_IMPORT.sql
P\BI_ERP_GET_SINGLE_FILENAME.sql
P\BI_STAMMDATEN_PROJECTS_IMPORT.sql
Mitglied: godlie
godlie 01.04.2009 um 15:50:19 Uhr
Goto Top
Also mit diesem code erhalte ich keine endlosschleife.
Das was du evtl. für eine Endlosschleife haltest wird einfach dementsprechend lange dauern.

set anz=0
set HELP_PATH="foob"  
for /F "skip=1 tokens=1* delims=\" %%i in (veraendert.txt) do call :count %%j  
goto :weiter

:weiter
set anz=0
for /F "skip=3 tokens=1* delims=\" %%i in (neu.txt) do call :zaehl %%j  
goto :EOF

:count
set /a anz=%anz%+1
echo print 'Change %anz%' >> %HELP_PATH%\install_backend.sql  
echo --:r".\%*" >> %HELP_PATH%\install_backend.sql  
goto :weiter

:zaehl
set /a anz=%anz%+1
echo print 'New %anz%' >> %HELP_PATH%\install_backend.sql  
echo --:r".\%*" >> %HELP_PATH%\install_backend.sql  
goto :EOF
Mitglied: Pantherstyle
Pantherstyle 01.04.2009 um 16:01:57 Uhr
Goto Top
Hallo,
ich habe deinen Post 1zu1 übernommen allerdings ist er immernoch in der Endlosschleife:
print 'Change 1'
--:r".\ACMConvertDate.sql"
print 'New 1'
--:r".\convertDateToRnr.sql"
print 'New 2'
--:r".\getInvoiceDocName.sql"
print 'New 3'
--:r".\UTIL_convertToFloat.sql"
print 'New 4'
--:r".\BI_EPM_IMPORT_ERRORS.sql"
print 'New 5'
--:r".\BI_EPM_SAP_IMPORT.sql"
print 'New 6'
--:r".\BI_ERP_GET_SINGLE_FILENAME.sql"
print 'New 7'
--:r".\BI_STAMMDATEN_PROJECTS_IMPORT.sql"
print 'New 8'
--:r".\BI_STAMMDATEN_PROJECTS_IMPORT_SELECT.sql"
print 'New 9'
--:r".\BI_STAMMDATEN_PROJECTS_REVIEW.sql"
print 'New 10'
--:r".\BI_STAMMDATEN_PROJECTS_REVIEW_SELECT.sql"
print 'New 11'
--:r".\BI_STAMMDATEN_PROJECTS_USE.sql"
print 'New 12'
--:r".\BI_STAMMDATEN_PROJECTS_USE_SELECT.sql"
print 'New 13'
--:r".\TEMP_ARCCALC_PROCEDURES.sql"
print 'New 14'
--:r".\TBL_MASTERDATA_PROJECTS.sql"
print 'Change 15'
--:r".\BfxFctMasterGetOption.sql"
print 'New 1'
--:r".\convertDateToRnr.sql"
print 'New 2'
--:r".\getInvoiceDocName.sql"
print 'New 3'
--:r".\UTIL_convertToFloat.sql"
print 'New 4'
--:r".\BI_EPM_IMPORT_ERRORS.sql"
print 'New 5'
--:r".\BI_EPM_SAP_IMPORT.sql"
print 'New 6'

wie man sieht wiederhohlt er sich permanent

Code
set anz=0 
for /F "skip=1 tokens=1* delims=\" %%i in (%DIFFTOOL_PATH%\veraendert.txt) do call :count %%j  
goto :weiter 
:weiter
set anz=0 
for /F "skip=3 tokens=1* delims=\" %%i in (%DIFFTOOL_PATH%\neu.txt) do call :zaehl %%j  
goto :EOF
:count 
set /a anz=%anz%+1 
echo print 'Change %anz%' >> %HELP_PATH%\install_backend.sql   
echo --:r".\%*" >> %HELP_PATH%\install_backend.sql   
goto :weiter 
:zaehl
set /a anz=%anz%+1 
echo print 'New %anz%' >> %HELP_PATH%\install_backend.sql  
echo --:r".\%*" >> %HELP_PATH%\install_backend.sql   
goto :EOF
Mitglied: godlie
godlie 01.04.2009 um 16:10:44 Uhr
Goto Top
Verdammt ich habs ja gewusst da war noch ein Fehler:

Folgendes: und zwar in der Zeile 12 darf nciht goto:weiter stehen sondern da muss goto :EOF stehen.

Dann bekommst sowas raus:
print 'Change 1'   
--:r".\ACMConvertDate.sql"   
print 'Change 2'   
--:r".\BfxFctMasterGetOption.sql"   
print 'Change 3'   
--:r".\zZz.txt"   
print 'Change 4'   
--:r".\UTIL_getDatePart.sql"   
print 'Change 5'   
--:r".\UTIL_getFilename.sql"   
print 'Change 6'   
--:r".\UTIL_getErrorInfo.sql"   
print 'New 1'   
--:r".\BI_EPM_IMPORT_ERRORS.sql"   
print 'New 2'   
--:r".\BI_EPM_SAP_IMPORT.sql"   
print 'New 3'   
--:r".\BI_ERP_GET_SINGLE_FILENAME.sql"   
print 'New 4'   
--:r".\BI_STAMMDATEN_PROJECTS_IMPORT.sql"   
Mitglied: Pantherstyle
Pantherstyle 02.04.2009 um 08:16:44 Uhr
Goto Top
Es funktioniert ich danke Dir! Jetzt muss ich nur noch herausklamüsern warum ;D