flauschbobbel
Goto Top

Betriebssystem-Version in eine Variable übernehmen

Hallo Zusammen,

ich möchte in einem Script abfragen, ob das Script auf einem XP-Client (Windows XP Professional) läuft.
Wenn nicht, dass soll das Script beendet werden. Die %OS% Variable kann ich nicht abfagen, da die ja nur
Windows_NT zurückliefert, auch wenn XP auf dem Client läuft.

Ich habe das Script wie folgt gebaut:

@echo off & setlocal
set OSXP=

:: zur Info
wmic path win32_operatingsystem get caption

for /f "tokens=2" %%i in ('wmic path win32_operatingsystem get caption^|FINDSTR "XP Professional"') do (  
	echo Client ist XP Professional-Rechner
	set OSXP=True
	echo %OSXP%
)

echo %OSXP%
if defined %OSXP% goto AAA
echo client ist kein XP-rechner
goto ende

:AAA
echo client ist xp-rechner

:ENDE
echo ende!

Es kommt die Anzeige:
Client ist XP Professional-Rechner
Echo ist ausgeschaltet (OFF).
True
client ist kein XP-rechner
ende!

D.h., es wird in der For-Schleife meine Variable nicht gesetzt. Könnt ihr mir einen Tipp geben warum?
Oder wie kann ich mein Problem sonst noch lösen? Die Variable windir kann ich nicht nutzen, da auf den Clients die
Windows-Verzeichnisse nicht Standard sind (Die Variable verweist ja standardmäßig bei Windows 2000 auf C:\WINNT und bei Windows XP auf C:\Windows, leider nicht bei mir)...

Grüße,
Flauschbobbel

Content-ID: 87011

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

Ausgedruckt am: 22.11.2024 um 16:11 Uhr

Biber
Biber 05.05.2008 um 20:49:19 Uhr
Goto Top
Moin Flauschbobbel,

das "ECHO is' EINgerastet" kommt von dieser Stelle:
 FOR /F in  ..sülzdibülz..... DO (
.....
	set OSXP=True
	echo %OSXP%           ----> hier kommts her
)
echo %OSXP%
Dieses ganze FOR-Gelumpe ist, auch wenn Du es ästhetisch und ordentlich ausgerichtet lesbar auf mehrere Zeilen verteilt hast (was sinnvoll ist!) für die CMD.exe EINE Anweisung.

Dementsprechend werden alle Variablen in dieser Zeile EINMAL aufgelöst, bevor die Ausführung losgeht.
(M$-Praktikanten sind ja nich' blöd... sondern effektiv.)

Abhilfe (die sinnvolle der drei möglichen): nach der FOR-Anweisungs-"ZEILE" prüfen.
 FOR /F in ..( ..) DO (
	set OSXP=True
)
if defined OSXP echo [Debug] ...es ist ein XP
...

Zum OS-Version-Ermitteln haben wir auch schon mal ein, zwei Tutorials zusammengeharkt in "Batch & Shell".

Grüße
Biber
miniversum
miniversum 05.05.2008 um 20:58:40 Uhr
Goto Top
Versuchs mal so:
@echo off & setlocal
:: zur Info
wmic path win32_operatingsystem get caption

wmic path win32_operatingsystem get caption^|FINDSTR "XP Professional" && goto:AAA  

echo client ist kein XP-rechner
goto ende

:AAA
echo Client ist XP Professional-Rechner
echo client ist xp-rechner

:ENDE
echo ende!
Flauschbobbel
Flauschbobbel 05.05.2008 um 21:30:16 Uhr
Goto Top
Hallo miniversum,

danke für den Tip. Leider geht es nicht so richtig...

Das ist der Output:

Caption
Microsoft Windows XP Professional

Ungültiger GET-Ausdruck.
client ist kein XP-rechner
ende!

Grüße,
Flauschbobbel
bastla
bastla 05.05.2008 um 21:45:51 Uhr
Goto Top
Hallo Flauschbobbel!

Lass das "^" vor dem "|" weg ...

... und verwende beim "findstr" zur Sicherheit den Schalter "/c" (sonst gibt sich noch ein "XP Home" als "Professional" aus).

Grüße
bastla

[Edit] @Biber: Eigentlich behauptest Du doch immer, ich würde rechts überholen ... face-wink [/Edit]
[Edit2] ... könntest Du beidseitig überholen ...
Eigentlich wäre anstelle von "überholen" schon eher "überrollen" angebracht ... wobei ich allerdings sehr sicherheitsbewusst und daher immer mit ausgefahrenem Airbag unterwegs bin ...
Im Übrigen sind mir "Gerüchte" relativ egal - was zählt, sind "Gerichte". face-wink [/Edit2]
Biber
Biber 05.05.2008 um 21:46:39 Uhr
Goto Top
Moin Flauschbobbel,

a)
Leider ### es nicht so richtig
Ihr sollt nicht immer ### sagen...
b) lass das Caret ("^") weg. In der Halbzeile ist nichts zu maskieren.
Grüße
Biber

[Edit] bastla hat wieder links überholt... *winkzzz* [/Edit]
[Edit2] ...Eigentlich behauptest Du doch immer, ich würde rechts überholen ...
na ja, es geht das Gerücht, seit Ende der Fastenzeit könntest Du beidseitig überholen... gleichzeitig... <ganzbreitgrinz>[/Edit2]
Flauschbobbel
Flauschbobbel 05.05.2008 um 22:05:43 Uhr
Goto Top
Hallo bastla, biber,

vielen herzlichen Dank! Es funktioniert.

@Biber:
Ich gelobe Besserung und werde ### nicht mehr schreiben. Leider ist es mir in einer anderen Beitrag zwischenzeitlich wieder "herausgerutscht"... Tschuldigung!

Grüße,
Flauschbobbel