seb1212
Goto Top

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)

 
@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

Content-Key: 264348

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

Printed on: April 20, 2024 at 00:04 o'clock

Member: rubberman
Solution rubberman Feb 24, 2015, updated at Feb 25, 2015 at 07:59:14 (UTC)
Goto Top
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:
@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
Grüße
rubberman