yauhun
Goto Top

OS-name auselesen: Windows 7 Enterprise hat standardmäßig ein Leerzeichen am Ende vom Namen? Echt jetzt?

Hallo allerseits.

Ich bin leicht schockiert...

Ich schreibe heute eine kleine Batch, die am Anfang eine kleine Auswahl von Betriebssystemen ausliest und je nach OS entsprechend weiter läuft.
Seit Stunden teste ich und frage mich, warum es überall weiter läuft wie gewünscht, außer bei Windows 7 Enterprise.
(Getestet unter Windows 10 Enterprise, Windows 8.1 Enterprise und Windows 7 Enterprise.)

Dann hab ich spaßeshalber mal den Namen des OS ausgelesen und stelle fest - da ist ein Leerzeichen standardmäßig am Ende?

untitled

Und sobald ich da ein Leerzeichen einfüge im Skript, geht der Mist auf einmal...
(OS-Name wird ausgelesen aus systeminfo.exe)


Liegt das irgendwie an mir? Ich kann einfach nicht glauben, dass Microsoft standardmäßig am Ende des OS-Namens ein Leerzeichen hat...
Das wäre mal ein mega Fail, und woher soll man sowas denn wissen / erahnen...
Muss ich jetzt ernsthaft für alle Betriebssysteme eine Testumgebung machen, nur um zu prüfen, ob noch irgendwo Fallen in den OS-Namen versteckt sind - oder gibt es dazu vielleicht eine Übersicht, die bei "Fails" in Windows-OS-Namen hinweist?

Andernfalls - wie könnte ich das besser lösen?

capture

Code:
for /f "tokens=2 delims=:" %%a in ('systeminfo.exe ^| find "OS Name"') do set OS_Name=%%a  
for /f "tokens=* delims= " %%a in ("%OS_Name%") do set OS_Name=%%a  
echo.
echo Your OS is "%OS_Name%".  
echo.
if /i "%OS_Name%"=="Microsoft Windows 7 Home Basic" goto win_7_e  
if /i "%OS_Name%"=="Microsoft Windows 7 Home Premium" goto win_7_e  
if /i "%OS_Name%"=="Microsoft Windows 7 Professional" goto win_7_e  
if /i "%OS_Name%"=="Microsoft Windows 7 Enterprise " goto win_7_e  
if /i "%OS_Name%"=="Microsoft Windows 7 Ultimate" goto win_7_e  
if /i "%OS_Name%"=="Microsoft Windows 8" goto win_8_e  
if /i "%OS_Name%"=="Microsoft Windows 8 Pro" goto win_8_e  
if /i "%OS_Name%"=="Microsoft Windows 8 Enterprise" goto win_8_e  
if /i "%OS_Name%"=="Microsoft Windows 8.1" goto win_8_e  
if /i "%OS_Name%"=="Microsoft Windows 8.1 Pro" goto win_8_e  
if /i "%OS_Name%"=="Microsoft Windows 8.1 Enterprise" goto win_8_e  
if /i "%OS_Name%"=="Microsoft Windows 10 Home" goto win_10_e  
if /i "%OS_Name%"=="Microsoft Windows 10 Pro" goto win_10_e  
if /i "%OS_Name%"=="Microsoft Windows 10 Enterprise" goto win_10_e  

if not exist %SystemRoot%\system32\systeminfo.exe goto :warning

set OS_Name=
endlocal

Gruß
Yauhun

Content-ID: 319284

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

Ausgedruckt am: 25.11.2024 um 21:11 Uhr

131301
131301 27.10.2016 um 15:00:16 Uhr
Goto Top
powershell -Executionpolicy Bypass -command "(gwmi win32_OperatingSystem).Caption.Trim()"  
Gruß
Yauhun
Yauhun 27.10.2016 um 15:10:26 Uhr
Goto Top
Bin Batch-Anfänger. Wollte mich erst mal damit einarbeiten, bevor ich zu PS uplevel...
Trotzdem danke für die Alternative.
DopeEx1991
DopeEx1991 27.10.2016 um 15:20:24 Uhr
Goto Top
Hi,
das meint MS tatsächlich ernst mit dem Leerzeichen am Ende des Namens, Enterprise ist da auch nicht die einzige Version.
Ich hab damals auch die Kriese bekommen, weil meine WMI-Filter ohne Leerzeichen nicht wollten.

LG
rubberman
Lösung rubberman 27.10.2016 um 15:55:58 Uhr
Goto Top
Hallo Yauhun.

Vergiss die Namen und nimm die Versionsnummer. Entweder parse die Ausgabe von WMIC OS oder althergebracht die von VER.
Etwa so
@echo off &setlocal

setlocal EnableDelayedExpansion
for /f "tokens=2 delims=" %%i in ('ver') do set "version=%%i"  
for /f "tokens=1-3 delims=." %%i in ("!version:* =!") do (endlocal&set /a "major=%%i,minor=%%j,build=%%k")  
call :ver_%major%_%minor%
pause
exit /b


:ver_5_1
echo XP
exit /b

:ver_5_3
echo XP (64 Bit), Server 2003
exit /b

:ver_6_0
echo Vista, Server 2008
exit /b

:ver_6_1
echo Win7, Server 2008 R2
exit /b

:ver_6_2
echo Win8, Server 2012
exit /b

:ver_6_3
echo Win8.1, Server 2012 R2
exit /b

:ver_10_0
echo Win10, Server 2016
exit /b
Grüße
rubberman
DopeEx1991
Lösung DopeEx1991 27.10.2016 um 16:13:42 Uhr
Goto Top
Noch als zusatz: wenn du beim OS-Namen bleibst: Mindestens noch win 7 Pro hat hinten ein Leerzeichen dran. Bei den anderen kann ich dir nicht sagen, da ich nur Enterprise und Pro Versionen zum nachgucken habe, ich würde aber mal vermuten, dass die anderen auch eins hinten dran haben.

LG
Yauhun
Yauhun 27.10.2016 um 16:37:55 Uhr
Goto Top
Hey rubberman, schon viel von dir gelesen!

Ja, danke, noch bevor ich deinen Beitrag gelesen habe, hab ich schon alles in die Tonne gekloppt und bin auf Versionsnummern umgestiegen.
Absolut die richtige Entscheidung, ich ärgere mich sehr über mich selbst, dass ich Stunden vergeudet und nach dem Problem gesucht hab, anstatt es gleich so zu machen. Spart auch Zeilen. (Brauche sogar nur Win 7-10, nichts älteres.)

Schaut bei mir so aus:
for /f "tokens=4-5 delims=. " %%i in ('ver') do set OS_Version=%%i.%%j  
if "%OS_Version%" == "10.0" echo (Windows Version 10.0) & goto win_10_e  
if "%OS_Version%" == "6.3" echo (Windows Version 6.3) & goto win_8_e  
if "%OS_Version%" == "6.2" echo (Windows Version 6.2) & goto win_8_e  
if "%OS_Version%" == "6.1" echo (Windows Version 6.1) & goto win_7_e  

Danke, dass du dir die Mühe gemacht hast, was für mich zu basteln, much appreciated.
Yauhun
Yauhun 27.10.2016 aktualisiert um 16:42:43 Uhr
Goto Top
Hey DopeEx1991,

danke für die Infos!
Schon nach deiner ersten Nachricht traf mich der Schlag und ich bin auf Versionsnummern umgestiegen.
Ich hab leider grad keine anderen Win7-Testumgebungen als 7-Enterprise zur Hand, das soll aber auch unter den anderen laufen... das war mir dann zu riskant.

Keine Ahnung, was sich Microsoft dabei gedacht haben!
Auf jeden Fall ganz viel Danke für den Hinweis, hat mich dazu gebracht, es nicht weiter zu versuchen (hätte bloß noch mehr Zeit verschwendet).
Aber verrückt, ich habe zu dem Thema ein bisschen gegoogelt und echt nichts gefunden.

Was draus gelernt? : "Vertraue niemals darauf, dass Microsoft was richtig macht." xD