uragus
Goto Top

Problem mit kombination aus IF ELSE und FOR Schleife.

Hallo,
An sich möchte ich ein Script schreiben was eine DFSR-Replikation prüfen soll.
Mit Batch Scripten habe ich leider keine Erfahrung…

Ich habe die eigentlichen Funktionen gegen ECHO’s ersetzt da nicht mal das Grundgerüst funktioniert…
Im CMD Fenster bekomme ich nur.
"(" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

@echo off

for %%f in (DC1,DC2) do for %%i in (DC1,DC2) do (
	if not "%%f"=="%%i" (  
		echo Check BacklogFiles
		
		set /P backlogfiles=
		
			if not %backlogfiles%==0 (
				echo %%f hat austehende Replikation mit dem %%i
				
				echo Check BacklogFiles
				set /P backlogfiles=
				
				echo %backlogfiles% - Problem behoben.
				
				if not %backlogfiles%==0 (
					echo Replikation konnte nicht repariert werden.
				) else (echo Replikation lauft wieder.)
			)
	)
)
	
exit /b

Content-Key: 251148

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

Printed on: April 18, 2024 at 21:04 o'clock

Member: heilgecht
heilgecht Oct 07, 2014 updated at 09:53:10 (UTC)
Goto Top
Hallo,

"set /P backlogfiles="
nach "=" muss normalerweise ein Argument folgen, oder verstehe ich was falsch?

Mit freundlichen Grüßen
Member: Uragus
Uragus Oct 07, 2014 at 10:20:42 (UTC)
Goto Top
Der Wert wird dann in der CMD Konsole abgefragt.
Member: Nick.B
Nick.B Oct 07, 2014 at 12:23:18 (UTC)
Goto Top
Wird das nicht immer nur mit einem Prozentzeichen geschrieben also "%f"


MfG
Member: Uragus
Uragus Oct 07, 2014 updated at 12:55:12 (UTC)
Goto Top
bei der Eingabe von "for /? " im CMD Fenster, kommt diese Erklärung.

Um den FOR-Befehl in einem Batchprogramm zu verwenden, geben Sie %%Variable
statt %Variable an.
Member: Nick.B
Nick.B Oct 07, 2014 at 13:01:29 (UTC)
Goto Top
Hast Recht sehe es auch grad.

Müsste da dann nicht noch ein /F nach dem for drankommen.
Member: Uragus
Uragus Oct 07, 2014 at 13:21:37 (UTC)
Goto Top
schon möglich, mit /F geht es aber auch nicht weiter.
Member: Endoro
Endoro Oct 07, 2014 updated at 17:46:00 (UTC)
Goto Top
Hey, zum einen immer daran denken, cmd ist ein Interpreter. Zum anderen ist Batch nicht Javascript, da kannst du nicht einfach mal was hinschreiben face-smile
:: lets go
@echo off &setlocal

for %%f in (DC1,DC2) do for %%i in (DC1,DC2) do (
	if not "%%f"=="%%i" (  
		echo Check BacklogFiles
		
		set /P backlogfiles=
		
		if not "%backlogfiles%"=="0" (  
			echo %%f hat austehende Replikation mit dem %%i
			
			echo Check BacklogFiles
			set /P backlogfiles=
			
			echo %backlogfiles% - Problem behoben.
			
			if not "%backlogfiles%"=="0" (  
				echo Replikation konnte nicht repariert werden.
			) else ( 
				echo Replikation lauft wieder.
			)
		)
	)
)
	
exit /b
Gruss, Endoro
Member: bastla
bastla Oct 07, 2014 at 18:58:09 (UTC)
Goto Top
@ Endoro
Dürfte ich ganz beiläufig noch das Stichwort "delayedExpansion" ins Spiel bringen? face-wink

Grüße
bastla
Member: Endoro
Solution Endoro Oct 07, 2014, updated at Oct 08, 2014 at 14:35:23 (UTC)
Goto Top
Zitat von @bastla:
Dürfte ich ganz beiläufig noch das Stichwort "delayedExpansion" ins Spiel bringen? face-wink

Wie könnt ich das je vergessen face-smile
Ich hatte ja auf den Interpreter hingewiesen. Der interpretiert Zeile für Zeile. Wenn allerdings mehrere Programmzeilen mit einem Klammerpaar umschlossen werden, wie es bei Forschleifen oft passiert, wird der Code bei normaler Variablenerweiterung nur vor Eintritt in den geklammerten Codeblock interpretiert. Die einzigen Ausnahmen sind Laufzeitvariabe, weil den Microsoftpraktikanten Ende der 70'er aufgefallen ist, dass es sonst nicht funktioniert. Später haben sie dann erkannt, dass auch das noch unbefriedigend ist und haben die verzögerte Erweiterung erfunden, ohne die es heute nicht einmal mehr Liebhaber der Sprache gäbe. Die aber, wie wir es von Microsoft gewöhnt sind, dafür andere Probleme verursacht. Verzögert erweiterte Variable können innerhalb eines geklammerten Codeblocks "ausgelesen" werden, nachdem sich ihr Wert geändert hat. Ein kleines Beispiel:
@echo off &setlocal enabledelayedexpansion
set "variable=A"  
for %%a in (7) do (
	set "variable=B"  
	echo nicht verzögert erweitert: %variable%
	echo verzögert erweitert: !variable!
)
Alles klar? Gruss, Endoro
Member: Uragus
Uragus Oct 08, 2014 updated at 06:57:45 (UTC)
Goto Top
Zitat von @Endoro:

Hey, zum einen immer daran denken, cmd ist ein Interpreter. Zum anderen ist Batch nicht Javascript, da kannst du nicht einfach mal
was hinschreiben face-smile
> :: lets go
> @echo off &setlocal
> 
> for %%f in (DC1,DC2) do for %%i in (DC1,DC2) do (
> 	if not "%%f"=="%%i" (  
> 		echo Check BacklogFiles
> 		
> 		set /P backlogfiles=
> 		
> 		if not "%backlogfiles%"=="0" (  
> 			echo %%f hat austehende Replikation mit dem %%i
> 			
> 			echo Check BacklogFiles
> 			set /P backlogfiles=
> 			
> 			echo %backlogfiles% - Problem behoben.
> 			
> 			if not "%backlogfiles%"=="0" (  
> 				echo Replikation konnte nicht repariert werden.
> 			) else ( 
> 				echo Replikation lauft wieder.
> 			)
> 		)
> 	)
> )
> 	
> exit /b
> 
Gruss, Endoro

Hallo, danke für die Hinweise,
leider funktioniert die IF ELSE Abfrage so nicht mehr…0 wird nicht erkannt.
Member: heilgecht
heilgecht Oct 08, 2014 at 08:26:51 (UTC)
Goto Top
Hi,

ich denke mit VBS wärst du schon längst fertig.
Member: Endoro
Endoro Oct 08, 2014 at 10:50:57 (UTC)
Goto Top
Hey,
bitte lies dir meinen Beitrag durch.
Was meinst du, warum ich den mitternächtlich sonst geschrieben habe.
Gruss, Endoro