Geschachtelte For Schleife funktioniert nur im ersten Durchlauf
Guten Morgen,
vielleicht kann mir einer von euch sagen warum mein Script nach dem ersten Durchlauf nicht mehr an den Anfang der ersten Schleife zurück springt.Nach dem erstem durchlauf springt das Script vom Ende der übergeordneten Schleife zum Anfang der zweiten For Schleife anstatt wieder an den Anfang der übergeordneten For Schleife.
Die Datei Berechtigung_P.txt sieht so aus:
%Userid%;%UserId_antragsteller%
%Userid%;%UserId_antragsteller%
%Userid%;%UserId_antragsteller%
Hier erstmal das Script:
(Servername wurden durch //Pfad ersetzt, die Echos Anfang 1 etc. sind zum Testen enthalten)
So und hier jetzt was dabei rauskommt
Meine Frage jetzt, wo kommen nur Zeilen "\\Pfad\admin\Laufwerk_P\Email_erfolgreich.bat UserId dsget" her, eigentlich soll das Script nur diese Zeilen generien.
" \\Pfad\admin\Laufwerk_P\Email_erfolgreich.bat UserId email@adresse.de"
Vielen Dank
vielleicht kann mir einer von euch sagen warum mein Script nach dem ersten Durchlauf nicht mehr an den Anfang der ersten Schleife zurück springt.Nach dem erstem durchlauf springt das Script vom Ende der übergeordneten Schleife zum Anfang der zweiten For Schleife anstatt wieder an den Anfang der übergeordneten For Schleife.
Die Datei Berechtigung_P.txt sieht so aus:
%Userid%;%UserId_antragsteller%
%Userid%;%UserId_antragsteller%
%Userid%;%UserId_antragsteller%
Hier erstmal das Script:
(Servername wurden durch //Pfad ersetzt, die Echos Anfang 1 etc. sind zum Testen enthalten)
@Echo off
SETLOCAL ENABLEDELAYEDEXPANSION
::Prüfen ob Benutzer zum berechtigen vorhanden sind
if not exist \\Pfad\berechtigung_p.txt goto Ende
for /f "tokens=*" %%m in ('powershell.exe -ExecutionPolicy ByPass -command Get-Date -format ddMMyyyy') do set "Datum=%%m"
::Datei auslesen, Benutzer Vollzugriff geben, Benutzername in Datei mit Datum von Heute eintragen
for /f "tokens=1,2 delims=;" %%i in (\\Pfad\berechtigung_p.txt) do (
echo anfang 1
set "neuer_user=%%i"
set "user=%%j"
echo !user!
rem echo %%i>>\\Pfad\\Berechtigungen\!Datum!.log
rem echo %%i>>\\Pfad\\Berechtigungen\icacls.log
for /f "USEBACKQ skip=1" %%a in (`dsquery.exe user -name !User!^| dsget.exe user -email`) do (
echo anfang 2
set Email=%%a
echo ende 2
call :skip
)
:skip
echo !email!
icacls d:\TEST /t /c /q /inheritance:e /grant !neuer_user!:(OI^)(CI^)(F^)>>d:\log.txt
if "!errorlevel!" == "0" echo \\Pfad\\admin\Laufwerk_P\Email_erfolgreich.bat !neuer_user! !email!
if "!errorlevel!" GEQ "1" echo \\Pfad\\admin\Laufwerk_P\Email_fehler.bat !neuer_user! !email!
)
rem del \\Pfad\\hwinfo\berechtigung_p.txt
:Ende
ENDLOCAL
So und hier jetzt was dabei rauskommt
anfang 1
UserId
anfang 2
ende 2
email@adresse.de
\\Pfad\admin\Laufwerk_P\Email_erfolgreich.bat UserId email@adresse.de
anfang 2
ende 2
dsget
\\Pfad\admin\Laufwerk_P\Email_erfolgreich.bat UserId dsget
dsget
\\Pfad\admin\Laufwerk_P\Email_erfolgreich.bat UserId dsget
anfang 1
UserId
anfang 2
ende 2
email@adresse.de
\\Pfad\admin\Laufwerk_P\Email_erfolgreich.bat UserId email@adresse.de
anfang 2
ende 2
dsget
\\Pfad\admin\Laufwerk_P\Email_erfolgreich.bat UserId dsget
dsget
\\Pfad\admin\Laufwerk_P\Email_erfolgreich.bat UserId dsget
anfang 1
UserId
anfang 2
ende 2
email@adresse.de
\\Pfad\admin\Laufwerk_P\Email_erfolgreich.bat UserId email@adresse.de
anfang 2
ende 2
dsget
\\Pfad\admin\Laufwerk_P\Email_erfolgreich.bat UserId dsget
dsget
\\Pfad\admin\Laufwerk_P\Email_erfolgreich.bat UserId dsget
Meine Frage jetzt, wo kommen nur Zeilen "\\Pfad\admin\Laufwerk_P\Email_erfolgreich.bat UserId dsget" her, eigentlich soll das Script nur diese Zeilen generien.
" \\Pfad\admin\Laufwerk_P\Email_erfolgreich.bat UserId email@adresse.de"
Vielen Dank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 264348
Url: https://administrator.de/forum/geschachtelte-for-schleife-funktioniert-nur-im-ersten-durchlauf-264348.html
Ausgedruckt am: 22.04.2025 um 09:04 Uhr
1 Kommentar
Hallo seb1212,
ohne jetzt näher zu verstehen, was dein Code tut ...
Ein Label innerhalb einer Schleife anzuspringen, funktioniert nicht. Das musst du komplett umstricken.
Pseudocode:
Grüße
rubberman
ohne jetzt näher zu verstehen, was dein Code tut ...
Ein Label innerhalb einer Schleife anzuspringen, funktioniert nicht. Das musst du komplett umstricken.
Pseudocode:
@echo off
FOO ...
for %%x in (...) do (
BLA ...
for %%y in (...) do (
BLUB ...
call :myLabel
)
call :myLabel
)
rem Ende Hauptcode
exit /b
rem Subroutine
:myLabel
BAR ...
rem Ende Subroutine
exit /b
rubberman