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-ID: 251148

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

Ausgedruckt am: 22.11.2024 um 22:11 Uhr

heilgecht
heilgecht 07.10.2014 aktualisiert um 11:53:10 Uhr
Goto Top
Hallo,

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

Mit freundlichen Grüßen
Uragus
Uragus 07.10.2014 um 12:20:42 Uhr
Goto Top
Der Wert wird dann in der CMD Konsole abgefragt.
Nick.B
Nick.B 07.10.2014 um 14:23:18 Uhr
Goto Top
Wird das nicht immer nur mit einem Prozentzeichen geschrieben also "%f"


MfG
Uragus
Uragus 07.10.2014 aktualisiert um 14:55:12 Uhr
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.
Nick.B
Nick.B 07.10.2014 um 15:01:29 Uhr
Goto Top
Hast Recht sehe es auch grad.

Müsste da dann nicht noch ein /F nach dem for drankommen.
Uragus
Uragus 07.10.2014 um 15:21:37 Uhr
Goto Top
schon möglich, mit /F geht es aber auch nicht weiter.
Endoro
Endoro 07.10.2014 aktualisiert um 19:46:00 Uhr
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
bastla
bastla 07.10.2014 um 20:58:09 Uhr
Goto Top
@ Endoro
Dürfte ich ganz beiläufig noch das Stichwort "delayedExpansion" ins Spiel bringen? face-wink

Grüße
bastla
Endoro
Lösung Endoro 08.10.2014 aktualisiert um 16:35:23 Uhr
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
Uragus
Uragus 08.10.2014 aktualisiert um 08:57:45 Uhr
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.
heilgecht
heilgecht 08.10.2014 um 10:26:51 Uhr
Goto Top
Hi,

ich denke mit VBS wärst du schon längst fertig.
Endoro
Endoro 08.10.2014 um 12:50:57 Uhr
Goto Top
Hey,
bitte lies dir meinen Beitrag durch.
Was meinst du, warum ich den mitternächtlich sonst geschrieben habe.
Gruss, Endoro