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

Registry Einträge mit bestimmten Werten vergleichen

Frage Entwicklung Batch & Shell

Mitglied: krusher

krusher (Level 1) - Jetzt verbinden

28.04.2010, aktualisiert 18.10.2012, 5847 Aufrufe, 6 Kommentare

Hallo erstmal,
Also ich möchte gerne per batchfile automatisch vergleichen ob Windows XP, Vista oder 7 installiert ist.
wenn XP installiert ist führe script x aus wenn Vista script y und wenn 7 führe script z aus.

Also ich denke mal das ich dafür den registry Eintrag exportieren muss. und dann ein einer IF abfrage vergleichen muss.

falls noch Infos benötigt werden einfach bescheid sagen.
schonmal danke im vorraus^^
Mitglied: LotPings
28.04.2010, aktualisiert 18.10.2012
Hallo krusher,

ich kämpfe zwar auch schon mal mit der Forum-Suchfunktiom aber oft stehen unter deinem Beittrag sinnvolle Lösungshinweise.
Um das Rad nicht neu zu erfinden sieh die mal diese Anleitung an: Batch - Betriebssysteminformationen abfragen...

Gruß
LotPings
Bitte warten ..
Mitglied: krusher
28.04.2010 um 10:11 Uhr
Also ich bin jetzt mal auf den Befehl <COMP> gestossen. womit ich zwei Dateien miteinander vergleichen kann.
Ist es möglich das ich für Win- XP,Vista und 7 eine Textdatei erstelle und dann einfach nur noch beim starten des Programms die
Aktuelle Version Exportiere und die Aktuelle Version dann jeweils mit allen vergleiche.
also ich mein das so:

1: @echo off
2: reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductName" > d:\version.txt
3:
4: comp d:\version.txt d:\XP.txt /A /N=3

hier hänge ich jetzt fest. der gibt mir wohl das zurück
--->
>Vergleichen von d:\version.txt und d:\XP.txt
>Unterschied festegestellt bei Zeile 3
>Datei1 = 7
>Datei 2 = X
>Unterschied festegestellt bei Zeile 3
>Datei 1 =
>Datei 2 = P
>Unterschied festegestellt bei Zeile 3
>Datei1 = P
>Datei 2 =
>Unterschied festegestellt bei Zeile 3
>Datei1 = r
>Datei 2 =
>Unterschied festegestellt bei Zeile 3
>Datei1 = 0
>Datei 2 =
>Unterschied festegestellt bei Zeile 3
>Datei1 = f
>Datei 2 =
>Datei hat nur 2 Zeilen.
.....

nur wie werte ich das ausgebene jetzt aus. ich müsste ja vorzugsweise true oder falls erhalten. oder 1 und 0 damit ich damit weiter händeln kann.
dann könnte ich den wert 1 oder 0 in einer variable schreiben und dann anhand einer if abfrage sagen ob er die nächste datei vergleicht oder direkt mit goto zu einer anderen
stelle im queltext springt.
Bitte warten ..
Mitglied: krusher
28.04.2010 um 10:13 Uhr
sry war noch am tippen hab den post zu spät gesehen. ich schau mir das an. danke. aber gesucht hatte ich, anscheind wohl nicht richtig
Bitte warten ..
Mitglied: krusher
28.04.2010 um 10:38 Uhr
Also ich habe mich da jetzt mal durchgewuzelt. und habe mir anhand der infos dieses script geschrieben:

@echo off
call :FncWinVer -e "XP" && echo XP
call :FncWinVer -e "Vista" && echo Vista
call :FncWinVer -e "7" && echo 7


goto :EOF







:FncWinVer ::Version 2.0.1
::Parameters: [-e | -s] [...]
::Options: -e <Name> [Name2] When the Operating System is one of the name, function returns true (0)
:: Name can be "NT3", "NT4", "2000", "2003", "2008", "XP", "Vista"
:: For Detail-Information use e.g. "XP Professional:::German:SP2" (see Example)
:: -s <VarNameToReturnOSString>
::Example: if "%OS%" == "" echo The OS is DOS, Win3.x or Win9x & goto :EOF (you can not use batch-functions)
:: call :FncWinVer (print OS-Version, e.g. "Windows XP Professional:5.1 Build 2600:NonSuite:German:SP2:32 bit")
:: call :FncWinVer -s _x (set _x=OS-Version)
:: for /F "tokens=1-6 delims=:" %%a in ("%_x%") do (
:: echo Operating System... %%a &rem e.g. "Windows XP Professional"
:: echo Version............ %%b &rem e.g. "5.1 Build 2600"
:: echo Product Suite...... %%c &rem e.g. "Terminal Server, ..."
:: echo Localization....... %%d &rem e.g. "German"
:: echo Service Pack....... %%e &rem e.g. "SP2"
:: echo Architecture....... %%f &rem e.g. "32 bit"
:: )
:: call :FncWinVer -e "NT" "XP" && (
:: echo The Operating System is Windows NT3 or NT4 or XP
:: call :FncWinVer -e "XP::::SP2" && echo The OS is Windows XP with Service Pack 2
:: call :FncWinVer -e "XP Professional:::SP2" && echo The OS is Windows XP Profssional with SP2
:: call :FncWinVer -e "XP Professional::German:SP2" && echo The OS is German Windows XP Prof with SP2
:: call :FncWinVer -e "XP Pro::Ger:SP2" && echo The OS is German Windows XP Prof with SP2
:: )
:: call :FncWinVer -e "NT4" "XP" || echo The OS is not Windows NT4 or XP (&&=is true; ||=is not true)
:: call :FncWinVer -e "NT" "XP" "Vista" "2000" "2003::::SP0" "2003::::SP1" || (
:: echo This is Windows 2003 with SP2 or higher - also can be Windows 2008, etc.
:: )
:: call :FncWinVer -e "::Terminal Server::" && echo This is a Terminal Server
:: call :FncWinVer -e ":5.1:::" && echo This is Version 5.1
:: call :FncWinVer -e ":Build 2600:::" && echo This is Build 2600
:: call :FncWinVer -e ":5.1 Build 2600:::" && echo This is Version 5.1 Build 2600
:: call :FncWinVer -e ":5.1 Build 2600" && echo This is Version 5.1 Build 2600
::Return: 0=Operating System found; 1=Operating System not found; 2=syntax error
setlocal EnableDelayedExpansion & set "_#SP=SP0" & set "_#OSEX1=NonSuite" & set "_#TMP=" & set "_#EL=0" & set "_#Prd=unknown system"
if exist "%systemroot%\system32\prodspec.ini" ( ::Name und Sprache ermitteln; NT3 bis Windows 2008
for /F "tokens=1* delims==" %%a in ('type "%systemroot%\system32\prodspec.ini"') do (
if /i "%%a" == "Product" set _#Prd=%%b
if /i "%%a" == "Localization" set _#Lang=%%b
)
) else ( ::ab Vista
set _#Lang=%LC_LANG%
set _#TmpPrdFile=%TMP:"=%\%~n0_Prd%RANDOM%.tmp &::Da der ProductName, z.B. "Vista (TM)", auch Klammern enthalten kann...
for /f "tokens=2,* delims= " %%a in ('%SYSTEMROOT%\system32\reg.exe query
"HKLM\Software\Microsoft\Windows NT\CurrentVersion"
/v "ProductName" 2^>NUL ^| find /i "ProductName"') do (echo."%%b") > "!_#TmpPrdFile!"
set /p "_#Prd=" < "!_#TmpPrdFile!" &::... wird die Variablen-Zuweisung ueber diesen Umweg vorgenommen.
set "_#Prd=!_#Prd=!" & set "_#Prd=!_#Prd=!" & set "_#Prd=!_#Prd:"=!"
del "!_#TmpPrdFile!"
)

if exist "%windir%\SysWOW64" ( set "_#Bit=64 bit" ) else ( set "_#Bit=32 bit" )

set "_#Prd=%_#Prd:NT Workstation 4.=NT4 Workstation 4.%" & set "_#Prd=%_#Prd:NT Server 4.=NT4 Server 4.%"
set "_#Prd=%_#Prd:NT Workstation 3.=NT3 Workstation 3.%" & set "_#Prd=%_#Prd:NT Server 3.=NT3 Server 3.%"

if not exist "%SYSTEMROOT%\system32\reg.exe" ( ::NT3, NT4 und w2k kennen keine reg.exe, daher...
set _#TmpRegFile=%TMP:"=%\%~n0_RegExport%RANDOM%.tmp
%SYSTEMROOT%\regedit.exe /E "!_#TmpRegFile!" "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion"
type "!_#TmpRegFile!" > "!_#TmpRegFile!_ANSI-Format"
rem Von den ca. 60.000 rekursiv exportierten Registry-Zeilen die ersten 100 Zeilen extrahieren...
(for /L %%i in (1,1,100) do set /p "_x=" & echo.!_x!) <"!_#TmpRegFile!_ANSI-Format" >"!_#TmpRegFile!"
rem ...damit die nun folgende for-Schleife wesentlich schneller abgearbeitet werden kann:
for /f "tokens=1,2,4 delims== " %%a in ('type "!_#TmpRegFile!"') do (
if /i %%a == "CSDVersion" set _#SP=SP%%c
if /i %%a == "CurrentVersion" set _#Ver=%%b
if /i %%a == "CurrentBuildNumber" set _#Build=%%b
)
del "!_#TmpRegFile!" "!_#TmpRegFile!_ANSI-Format"
set _#OSEX1=NT3_NT4_or_2000=Product Suite can not be identified
) else ( ::Windows XP, 2003 oder hoeher... (reg.exe ist schneller und kann MULTI_SZ "ProductSuite" auslesen)
for /f "tokens=1,3,5 delims= " %%a in ('%SYSTEMROOT%\system32\reg.exe query
"HKLM\Software\Microsoft\Windows NT\CurrentVersion" 2^>NUL') do (
if /i "%%a" == "CSDVersion" set _#SP=SP%%c
if /i "%%a" == "CurrentVersion" set _#Ver=%%b
if /i "%%a" == "CurrentBuildNumber" set _#Build=%%b
)
for /f "tokens=2,* delims= " %%a in ('%SYSTEMROOT%\system32\reg.exe query
"HKLM\System\CurrentControlSet\Control\ProductOptions"
/v "ProductSuite" 2^>NUL ^| find /i "ProductSuite"') do set _#TMP=%%b
if defined _#TMP set _#TMP=!_#TMP:\0\0=!
if defined _#TMP set _#TMP=!_#TMP:\0=, !
if defined _#TMP if not "!_#TMP!" == ", " set _#OSEX1=!_#TMP!
)

set _#TMP=%_#Prd:*Terminal Server Edition=Found_%
if "%_#TMP:~0,6%" == "Found_" ( ::zur Vereinheitlichung: unter NT4 den Prd-TS-Eintrag nach ProductSuite verschieben
set _#Prd=%_#Prd: Terminal Server Edition=%
set _#OSEX1=Terminal Server Edition, %_#OSEX1%
)

set "_#OS_Info=%_#Prd%:%_#Ver% Build %_#Build%:%_#OSEX1%:%_#Lang%:%_#SP%:%_#Bit%" & set "_#OS_Info=!_#OS_Info:"=!"

if "%~1" == "" (
echo %_#OS_Info%
goto :LEB_FncWinVer_END
) else if "%~1" == "-s" (
endlocal & set "%~2=%_#OS_Info%" & exit /b %_#EL%
) else if not "%~1" == "-e" (
set _#EL=2 & goto :LEB_FncWinVer_END
)
set _#EL=1
:LOOP_FncWinVer_NextOS ::Option -e gefunden (es soll gestestet werden, ob das aktuelle Betriebssystem bestimmte Bedingungen erfuellt)
shift
set "_#InfoLST=%_#OS_Info%:#END#" & set "_#ParLST=%~1:#END#"
:LOOP_FncWinVer_NextDetail
set "_#InfoITM=%_#InfoLST%" &rem die OS-Info-Liste (z.B. "Windows XP Professional:5.1 Build 2600:...") auseinandernehmen...
set "_#InfoLST=%_#InfoLST:*:=%" &rem "*:=" loescht alles bis zum Aufkommen des ersten ":"-Zeichens; uebrig bleibt der rechte Teilstring
if not "%_#InfoITM%" == "%_#InfoLST%" (
set "_#InfoITM=!_#InfoITM::%_#InfoLST%=!" &rem InfoITM=erster Eintrag (entspricht urspruengliche Liste abzueglich rechtem Teilstring)
)
set "_#ParITM=%_#ParLST%" &rem Den Suchstring (z.B. "XP:::SP2:#END#") auseinandernehmen...
set "_#ParLST=%_#ParLST:*:=%" &rem "*:=" loescht alles bis zum Aufkommen des ersten ":"-Zeichens; uebrig bleibt der rechte Teilstring
if not "%_#ParITM%" == "%_#ParLST%" (
set "_#ParITM=!_#ParITM::%_#ParLST%=!" &rem ParITM=erster Eintrag (entspricht urspruengliche Liste abzueglich rechtem Teilstring)
)
if defined _#InfoITM if defined _#ParITM if not "%_#ParITM%" == "#END#" (
set "_#TMP=!_#InfoITM:*%_#ParITM%=Found_!" &rem das ist _wesentlich_ schneller als find.exe, ignoriert aber Gross-/Kleinschreibung
if "!_#TMP:~0,6!" == "Found_" ( ::gefunden; nun muss die Ueberpruefung noch einmal case-sensitiv durchgefueht werden...
echo "!_#InfoITM!" | find "!_#ParITM!" >NUL && set "_#EL=0" && rem "ParITM kommt in InfoITM vor" ist fuer dieses Item erfuellt
) else ( ::die erste Unstimmigkeit des Parameters wurde im aktuellen Item entdeckt
set "_#EL=1"
set "_#ParITM=#END#" &rem Weitersuchen nicht erforderlich; auf zum naechsten Parameter
)
)
if not "%_#ParITM%" == "#END#" if not "%_#InfoITM%" == "#END#" goto :LOOP_FncWinVer_NextDetail
if not "%~2" == "" if not "%_#EL%" == "0" goto LOOP_FncWinVer_NextOS
:LEB_FncWinVer_END
endlocal & exit /b %_#EL%#
Bitte warten ..
Mitglied: krusher
28.04.2010 um 11:24 Uhr
habs dann doch hinbekommen. muss jetzt nur noch die werte in eine variable kriegen
Bitte warten ..
Mitglied: LotPings
28.04.2010 um 11:34 Uhr
Schön wenn es geholfen hat,

in Zukunft solltest du bitte:
  • formatiere deinen Code unbedingt mit den dafür vorgesehenen Codetags in der Formatierungshilfe
  • Lange unveränderte Code Segmnte nicht erneut posten, ein Hinweis reicht.
  • Diesen Beitrag auf erledigt setzen.
  • Wenn du ernst genommen werden willst, nicht zu viele Antworten auf deine eigenen Beiträge schreiben

Gruß
LotPings
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Microsoft
Ordner mit LW-Buchstaben versehen und benennen (19)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...