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-Key: 246957

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

Printed on: April 19, 2024 at 14:04 o'clock

Member: bastla
bastla Aug 20, 2014 at 17:07:57 (UTC)
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
Member: robx
robx Aug 20, 2014 updated at 17:30:15 (UTC)
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
Member: bastla
Solution bastla Aug 20, 2014, updated at Aug 22, 2014 at 15:15:15 (UTC)
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
Member: robx
robx Aug 20, 2014 at 17:46:58 (UTC)
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
Member: bastla
bastla Aug 20, 2014 updated at 17:49:58 (UTC)
Goto Top
Hallo robx!

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

Hast Du meinen Ansatz (Code) getestet?

Grüße
bastla
Member: robx
robx Aug 20, 2014 at 17:59:49 (UTC)
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
Member: bastla
bastla Aug 20, 2014 at 18:03:42 (UTC)
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
Member: robx
robx Aug 20, 2014 updated at 18:15:05 (UTC)
Goto Top
Hallo bastla,

klasse !

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

Gruß, Rob
Member: bastla
bastla Aug 20, 2014 at 18:14:09 (UTC)
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
Member: WinCobold
WinCobold Aug 21, 2014 at 14:43:26 (UTC)
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
Member: robx
robx Aug 22, 2014 at 08:53:06 (UTC)
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