phill93
Goto Top

Variable enthält nur den letzten Wert

Hallo,

bin hier gerade am verzweifeln.
Ich möchte einen Variable auf das vorkommen eines bestimmten Strings prüfen.
Das klapp soweit, nur enthält die Variable immer das gleiche.

Die Ausgabe zeigt mir das er den SET (Zeile 7) richtig befüllt. Nur enthält die Variable in Zeile 8 wieder den aller letzten Wert.

C:\check_mk>(
SET str=235 Unknown_Attribute       0x0012   099   099   ---    Old_age   Always       -       21  
 echo 241 Total_LBAs_Written      0x0032   099   099   ---    Old_age   Always       -       6044528992   | findstr /i "Always"  1>nul    
 If "9009" == "0" (echo "235 Unknown_Attribute       0x0012   099   099   ---    Old_age   Always       -       21" )   
) 



Code:
@echo on
echo ^<^<^<smart^>^>^>
for /f "delims=# tokens=1,2" %%i in ('smartctl.exe --scan') do (  
	for /f "delims=, tokens=2" %%x in ("%%j") do (  
		if "%%x" == " ATA device" (  
			for /f "tokens=*" %%p in ('smartctl.exe -A %%i') do (  
					SET str=%%p
					echo %str% | findstr /i "Always" > nul  
					If "%errorlevel%"=="0" (  
						echo "%%p"  
					)
				)
			)
		)
	)
)

Hoffe ihr könnte mit trotz Brückentag helfen.

Daniel

Content-ID: 305546

Url: https://administrator.de/forum/variable-enthaelt-nur-den-letzten-wert-305546.html

Ausgedruckt am: 13.04.2025 um 19:04 Uhr

129413
Lösung 129413 27.05.2016 aktualisiert um 12:34:37 Uhr
Goto Top
Typischer Batch Fehler : Stichwort: EnableDelayedExpansion
http://ss64.com/nt/delayedexpansion.html

FOR-Schleife

Also vor die Variable ein
setlocal ENABLEDELAYEDEXPANSION
und die Variable dann anstatt mit Prozentzeichen mit Ausrufezeichen abrufen.
echo !str!
und hinterher wieder ein setlocal DISABLEDELAYEDEXPANSION

Gruß
skybird
Phill93
Phill93 27.05.2016 um 12:31:08 Uhr
Goto Top
Hallo skybird,

Vielen Dank das geht jetzt.

Bekomme dafür die Meldung:
Maximale Rekursionstiefe für SETLOCAL erreicht.

Das Script funktioniert nur die Meldung nervt.

Daniel
129413
Lösung 129413 27.05.2016 um 12:33:38 Uhr
Goto Top
Zitat von @Phill93:
Bekomme dafür die Meldung:
Maximale Rekursionstiefe für SETLOCAL erreicht.
Siehe:
Batch - setlocal EnableDelayedExpansion - ersetzen von Text, der ein Ausrufezeichen enthält
Phill93
Phill93 27.05.2016 um 12:41:52 Uhr
Goto Top
Danke jetzt geht alles