robx
Goto Top

Zähler in FOR Schleife als Parameter für Funktionsaufruf

Hallo,
ich will in einer FOR Schleife eine Funktion aufrufen, 1. Parameter soll ein Zähler sein, der sich jeweils um 1 erhöht.
Bislang habe ich dies:
@echo off setlocal enabledelayedexpansion
set a=<Pfad01>
set b=<Pfad02>
set c=<Pfad03>
set PARAM3="/XD D:\test\QuellV\test2"  
set PARAM4="D:\test\ZielV"  
FOR %%i IN (%a% %b% %c%) DO set /A m=m+1 & ('CALL :DEMO !m! %%i %PARAM3% %PARAM4%')  
:DEMO
...
goto :eof

Ich wäre für einen Tip sehr dankbar.
Gruß,
Rob

Content-ID: 246957

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

Ausgedruckt am: 25.11.2024 um 03:11 Uhr

bastla
bastla 20.08.2014 um 19:07:57 Uhr
Goto Top
Hallo robx!

Wird's mit
@echo off & setlocal enabledelayedexpansion
set a=<Pfad01>
set b=<Pfad02>
set c=<Pfad03>
set PARAM3="/XD D:\test\QuellV\test2"  
set PARAM4="D:\test\ZielV"  
FOR %%i IN (%a% %b% %c%) DO set /A m+=1 & CALL :DEMO !m! %%i %PARAM3% %PARAM4%
goto :eof

:DEMO
...
goto :eof
besser? Alternativ dazu könntest Du auch den Zähler einfach in ":DEMO" erhöhen und brauchst ihn dann nicht zu übergeben / kannst "delayedExpansion" einsparen:
@echo off & setlocal
set a=<Pfad01>
set b=<Pfad02>
set c=<Pfad03>
set PARAM3="/XD D:\test\QuellV\test2"  
set PARAM4="D:\test\ZielV"  
FOR %%i IN (%a% %b% %c%) DO CALL :DEMO %%i %PARAM3% %PARAM4%
goto :eof

:DEMO
set /A m+=1
...
goto :eof

Grüße
bastla
robx
robx 20.08.2014 aktualisiert um 19:30:15 Uhr
Goto Top
Hallo bastla,
danke für Deine schnelle Unterstützung!
ich würd gern bei Variante 1 bleiben, um "Zähler in Schleife" zu lernen.

Es wird beim Funktionsaufruf "!m!" nicht aufgelöst.
 ...>echo !m!
!m!
Hast Du noch einen Tip ?

Gruß, Rob
bastla
Lösung bastla 20.08.2014, aktualisiert am 22.08.2014 um 17:15:15 Uhr
Goto Top
Hallo robx!

Sorry - kann ich nicht nachvollziehen ...
@echo off & setlocal enabledelayedexpansion
set "a=Pfad01"  
set "b=Pfad02"  
set "c=Pfad03"  
set PARAM3="/XD D:\test\QuellV\test2"  
set PARAM4="D:\test\ZielV"  
FOR %%i IN ("%a%" "%b%" "%c%") DO set /A m+=1 & CALL :DEMO !m! %%i %PARAM3% %PARAM4%  
goto :eof

:DEMO
echo %*
goto :eof
erzeugt bei mir folgende Ausgabe:
1 "Pfad01" "/XD D:\test\QuellV\test2" "D:\test\ZielV"
2 "Pfad02" "/XD D:\test\QuellV\test2" "D:\test\ZielV"
3 "Pfad03" "/XD D:\test\QuellV\test2" "D:\test\ZielV"
Die Anführungszeichen um die einzelnen Pfade ("%a%" etc) sind nur erforderlich, wenn in den Pfadangaben Leer- oder bestimmte Sonderzeichen enthalten sind (schaden aber auch nicht) ...

Grüße
bastla
robx
robx 20.08.2014 um 19:46:58 Uhr
Goto Top
Hallo bastla,
sorry, bin wohl etwas unklar.
die Pfade klappen als Ausgabe, aber der Zähler "m" nicht.
FOR %%i IN ("%a%" "%b%" "%c%") DO set /A m+=1 & CALL :DEMO !m! %%i %PARAM3% %PARAM4%   
 FOR %%i IN ("%a%" "%b%" "%c%") DO set /A m+=1 & CALL :DEMO %%m %%i %PARAM3% %PARAM4%   
Beides klappt nicht.
Gruß, Rob
bastla
bastla 20.08.2014 aktualisiert um 19:49:58 Uhr
Goto Top
Hallo robx!

Der Hinweis auf die Pfade war nur Zugabe ... face-wink

Hast Du meinen Ansatz (Code) getestet?

Grüße
bastla
robx
robx 20.08.2014 um 19:59:49 Uhr
Goto Top
noch mal sorry, Dein Code klappt prima.

Hast Du noch einen letzten ! Tip für Leerzeichen in den Pfaden -
oder neue Frage ?

 @echo off & setlocal enabledelayedexpansion

set "a=D:\Eigene Dateien\d"  
set "b=D:\Eigene Dateien\K"  
set "c=D:\Eigene Dateien\P"  

set PARAM3="/XD D:\test\QuellV\test2"  
set PARAM4="D:\test\ZielV"  
FOR %%i IN (%a% %b% %c% %d% %e% %f%) DO set /A m+=1 & CALL :DEMO !m! %%i %PARAM3% %PARAM4%
goto :eof

:DEMO
echo %*
pause
goto :eof

Gruß, Rob
bastla
bastla 20.08.2014 um 20:03:42 Uhr
Goto Top
Hallo robx!
Hast Du noch einen letzten ! Tip für Leerzeichen in den Pfaden
Den gab's ja schon oben ... face-wink

Grüße
bastla
robx
robx 20.08.2014 aktualisiert um 20:15:05 Uhr
Goto Top
Hallo bastla,

klasse !

Danke noch mal für Deine sehr gute und schnelle Unterstützung !

Gruß, Rob
bastla
bastla 20.08.2014 um 20:14:09 Uhr
Goto Top
Hallo robx!
trotz Anführungszeichen.
In Deinem Code hast Du in Zeile 9 (im Gegensatz zu meiner Zeile 7 oben) keine Anführungszeichen verwendet ...

Grüße
bastla
WinCobold
WinCobold 21.08.2014 um 16:43:26 Uhr
Goto Top
Hallo Rob,

unabhängig von all den anderen Beiträgen: Das ursprüngliche Problem war wohl, dass das & vor setlocal gefehlt hat, und dann ist das eben kein eigener Befehl, sondern nur ein Anhängsel des echo.

Ich versuche daher, möglichst nie mehrere Befehle in eine Zeile zu schreiben, dann kann so etwas nicht so leicht passieren.

Gruß vom WinCobold
robx
robx 22.08.2014 um 10:53:06 Uhr
Goto Top
Hallo WinCobold,

ich bin grad völlig perplex -
Du hast Recht.

Danke für den Hinweis und den Rat !
Werd ich beherzigen.

Gruß, Rob