Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

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

Frage Entwicklung Batch & Shell

Mitglied: robx

robx (Level 1) - Jetzt verbinden

20.08.2014, aktualisiert 18:58 Uhr, 1075 Aufrufe, 11 Kommentare, 2 Danke

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:
01.
@echo off setlocal enabledelayedexpansion 
02.
set a=<Pfad01> 
03.
set b=<Pfad02> 
04.
set c=<Pfad03> 
05.
set PARAM3="/XD D:\test\QuellV\test2" 
06.
set PARAM4="D:\test\ZielV" 
07.
FOR %%i IN (%a% %b% %c%) DO set /A m=m+1 & ('CALL :DEMO !m! %%i %PARAM3% %PARAM4%') 
08.
:DEMO 
09.
... 
10.
goto :eof
Ich wäre für einen Tip sehr dankbar.
Gruß,
Rob
Mitglied: bastla
20.08.2014 um 19:07 Uhr
Hallo robx!

Wird's mit
01.
@echo off & setlocal enabledelayedexpansion 
02.
set a=<Pfad01> 
03.
set b=<Pfad02> 
04.
set c=<Pfad03> 
05.
set PARAM3="/XD D:\test\QuellV\test2" 
06.
set PARAM4="D:\test\ZielV" 
07.
FOR %%i IN (%a% %b% %c%) DO set /A m+=1 & CALL :DEMO !m! %%i %PARAM3% %PARAM4% 
08.
goto :eof 
09.
 
10.
:DEMO 
11.
... 
12.
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:
01.
@echo off & setlocal 
02.
set a=<Pfad01> 
03.
set b=<Pfad02> 
04.
set c=<Pfad03> 
05.
set PARAM3="/XD D:\test\QuellV\test2" 
06.
set PARAM4="D:\test\ZielV" 
07.
FOR %%i IN (%a% %b% %c%) DO CALL :DEMO %%i %PARAM3% %PARAM4% 
08.
goto :eof 
09.
 
10.
:DEMO 
11.
set /A m+=1 
12.
... 
13.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: robx
20.08.2014, aktualisiert um 19:30 Uhr
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.
01.
 ...>echo !m! 
02.
!m!
Hast Du noch einen Tip ?

Gruß, Rob
Bitte warten ..
Mitglied: bastla
LÖSUNG 20.08.2014, aktualisiert 22.08.2014
Hallo robx!

Sorry - kann ich nicht nachvollziehen ...
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "a=Pfad01" 
03.
set "b=Pfad02" 
04.
set "c=Pfad03" 
05.
set PARAM3="/XD D:\test\QuellV\test2" 
06.
set PARAM4="D:\test\ZielV" 
07.
FOR %%i IN ("%a%" "%b%" "%c%") DO set /A m+=1 & CALL :DEMO !m! %%i %PARAM3% %PARAM4% 
08.
goto :eof 
09.
 
10.
:DEMO 
11.
echo %* 
12.
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
Bitte warten ..
Mitglied: robx
20.08.2014 um 19:46 Uhr
Hallo bastla,
sorry, bin wohl etwas unklar.
die Pfade klappen als Ausgabe, aber der Zähler "m" nicht.
01.
FOR %%i IN ("%a%" "%b%" "%c%") DO set /A m+=1 & CALL :DEMO !m! %%i %PARAM3% %PARAM4% 
01.
 FOR %%i IN ("%a%" "%b%" "%c%") DO set /A m+=1 & CALL :DEMO %%m %%i %PARAM3% %PARAM4% 
Beides klappt nicht.
Gruß, Rob
Bitte warten ..
Mitglied: bastla
20.08.2014, aktualisiert um 19:49 Uhr
Hallo robx!

Der Hinweis auf die Pfade war nur Zugabe ...

Hast Du meinen Ansatz (Code) getestet?

Grüße
bastla
Bitte warten ..
Mitglied: robx
20.08.2014 um 19:59 Uhr
noch mal sorry, Dein Code klappt prima.

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

01.
 @echo off & setlocal enabledelayedexpansion 
02.
 
03.
set "a=D:\Eigene Dateien\d" 
04.
set "b=D:\Eigene Dateien\K" 
05.
set "c=D:\Eigene Dateien\P" 
06.
 
07.
set PARAM3="/XD D:\test\QuellV\test2" 
08.
set PARAM4="D:\test\ZielV" 
09.
FOR %%i IN (%a% %b% %c% %d% %e% %f%) DO set /A m+=1 & CALL :DEMO !m! %%i %PARAM3% %PARAM4% 
10.
goto :eof 
11.
 
12.
:DEMO 
13.
echo %* 
14.
pause 
15.
goto :eof
Gruß, Rob
Bitte warten ..
Mitglied: bastla
20.08.2014 um 20:03 Uhr
Hallo robx!
Hast Du noch einen letzten ! Tip für Leerzeichen in den Pfaden
Den gab's ja schon oben ...

Grüße
bastla
Bitte warten ..
Mitglied: robx
20.08.2014, aktualisiert um 20:15 Uhr
Hallo bastla,

klasse !

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

Gruß, Rob
Bitte warten ..
Mitglied: bastla
20.08.2014 um 20:14 Uhr
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
Bitte warten ..
Mitglied: WinCobold
21.08.2014 um 16:43 Uhr
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
Bitte warten ..
Mitglied: robx
22.08.2014 um 10:53 Uhr
Hallo WinCobold,

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

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

Gruß, Rob
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst New-ADUser (optional Parameter) (13)

Frage von mc-doubleyou zum Thema Batch & Shell ...

Batch & Shell
Schleife mit todos CMD

Frage von TommyDerWalker zum Thema Batch & Shell ...

Batch & Shell
gelöst Fehler in Schleife (2)

Frage von miczar zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...