Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Betriebssystem-Version in eine Variable übernehmen

Frage Entwicklung Batch & Shell

Mitglied: Flauschbobbel

Flauschbobbel (Level 1) - Jetzt verbinden

05.05.2008, aktualisiert 22:05 Uhr, 7985 Aufrufe, 6 Kommentare

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:

01.
@echo off & setlocal 
02.
set OSXP= 
03.
 
04.
:: zur Info 
05.
wmic path win32_operatingsystem get caption 
06.
 
07.
for /f "tokens=2" %%i in ('wmic path win32_operatingsystem get caption^|FINDSTR "XP Professional"') do ( 
08.
	echo Client ist XP Professional-Rechner 
09.
	set OSXP=True 
10.
	echo %OSXP% 
11.
12.
 
13.
echo %OSXP% 
14.
if defined %OSXP% goto AAA 
15.
echo client ist kein XP-rechner 
16.
goto ende 
17.
 
18.
:AAA 
19.
echo client ist xp-rechner 
20.
 
21.
:ENDE 
22.
echo ende!
Es kommt die Anzeige:
01.
Client ist XP Professional-Rechner 
02.
Echo ist ausgeschaltet (OFF). 
03.
True 
04.
client ist kein XP-rechner 
05.
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
Mitglied: Biber
05.05.2008 um 20:49 Uhr
Moin Flauschbobbel,

das "ECHO is' EINgerastet" kommt von dieser Stelle:
01.
 FOR /F in  ..sülzdibülz..... DO ( 
02.
..... 
03.
	set OSXP=True 
04.
	echo %OSXP%           ----> hier kommts her 
05.
06.
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.
01.
 FOR /F in ..( ..) DO ( 
02.
	set OSXP=True 
03.
04.
if defined OSXP echo [Debug] ...es ist ein XP 
05.
...
Zum OS-Version-Ermitteln haben wir auch schon mal ein, zwei Tutorials zusammengeharkt in "Batch & Shell".

Grüße
Biber
Bitte warten ..
Mitglied: miniversum
05.05.2008 um 20:58 Uhr
Versuchs mal so:
01.
@echo off & setlocal 
02.
:: zur Info 
03.
wmic path win32_operatingsystem get caption 
04.
 
05.
wmic path win32_operatingsystem get caption^|FINDSTR "XP Professional" && goto:AAA 
06.
 
07.
echo client ist kein XP-rechner 
08.
goto ende 
09.
 
10.
:AAA 
11.
echo Client ist XP Professional-Rechner 
12.
echo client ist xp-rechner 
13.
 
14.
:ENDE 
15.
echo ende!
Bitte warten ..
Mitglied: Flauschbobbel
05.05.2008 um 21:30 Uhr
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
Bitte warten ..
Mitglied: bastla
05.05.2008 um 21:45 Uhr
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 ... [/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". [/Edit2]
Bitte warten ..
Mitglied: Biber
05.05.2008 um 21:46 Uhr
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]
Bitte warten ..
Mitglied: Flauschbobbel
05.05.2008 um 22:05 Uhr
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
Bitte warten ..
Ähnliche Inhalte
Neue Wissensbeiträge
Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Router & Routing

PfSense auf Supermicro Intel Xeon D-15x8 SoC Bare Bone

Tipp von Dobby zum Thema Router & Routing ...

Windows Server

Exchange 2010 auf Windows Server 2016 und AD

(2)

Tipp von Herbrich19 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Basic
Programmierung von Windows Programmen (9)

Frage von Ghost108 zum Thema Basic ...

LAN, WAN, Wireless
Brauche Hilfe: Mit (schnellem) WLAN Strecke überbrücken (9)

Frage von pierrehansen zum Thema LAN, WAN, Wireless ...

C und C++
Fehlendes verständiss von C und C++ (8)

Frage von zelamedia zum Thema C und C ...