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

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

Member: Pantherstyle
Pantherstyle Apr 01, 2009 at 08:10:42 (UTC)
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 ....
Member: godlie
godlie Apr 01, 2009 at 10:49:27 (UTC)
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.
Member: Pantherstyle
Pantherstyle Apr 01, 2009 at 10:59:17 (UTC)
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
) 
Member: godlie
godlie Apr 01, 2009 at 11:01:21 (UTC)
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
Member: Pantherstyle
Pantherstyle Apr 01, 2009 at 11:20:50 (UTC)
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
Member: godlie
godlie Apr 01, 2009 at 11:22:20 (UTC)
Goto Top
das goto :EOF macht er ja erst nachdem der die Schleife durch hat.
Member: Pantherstyle
Pantherstyle Apr 01, 2009 at 11:28:22 (UTC)
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?
Member: godlie
godlie Apr 01, 2009 at 11:40:58 (UTC)
Goto Top
das steht in meinem vorletzten post.
Member: Pantherstyle
Pantherstyle Apr 01, 2009 at 12:03:28 (UTC)
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?
Member: godlie
godlie Apr 01, 2009 at 12:07:15 (UTC)
Goto Top
Zeile 17 entfernen.
Zeile 12 goto :EOF
oder goto weglassen
Member: Pantherstyle
Pantherstyle Apr 01, 2009 at 12:11:38 (UTC)
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  
Member: godlie
godlie Apr 01, 2009 at 12:17:57 (UTC)
Goto Top
hm probiers mal mit einem goto :EOF bei Zeile 17
ansonsten brauch ich die testdateien mal damit cih das nachstellen kann.
Member: Pantherstyle
Pantherstyle Apr 01, 2009 at 12:26:19 (UTC)
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
Member: godlie
godlie Apr 01, 2009 at 13:50:19 (UTC)
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
Member: Pantherstyle
Pantherstyle Apr 01, 2009 at 14:01:57 (UTC)
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
Member: godlie
godlie Apr 01, 2009 at 14:10:44 (UTC)
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"   
Member: Pantherstyle
Pantherstyle Apr 02, 2009 at 06:16:44 (UTC)
Goto Top
Es funktioniert ich danke Dir! Jetzt muss ich nur noch herausklamüsern warum ;D