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

Batch-Abfrage - 3 Schlüssel aus Registry abfragen, und nur das jeweils letzte Zeichen auf den Bildschirm ausgeben

Frage Entwicklung Batch & Shell

Mitglied: Possi1980

Possi1980 (Level 1) - Jetzt verbinden

31.10.2012, aktualisiert 15:47 Uhr, 3369 Aufrufe, 16 Kommentare

Per Batch werden 3 Registry-Schlüssel abgefragt. Die Ausgabe soll in je einer Variablen (x, y, und z) gespeichert werden. Jedoch soll nur das letzte Zeichen auf dem Bildschirm ausgegeben werden; etwa in der Form: "Client CLI123 hat die Version x.y.z installiert."

Hallo zusammen,

zunächst wird der Hostname des Clients verlangt. Für diesen Client soll die Batch dann 3 Werte aus der Registry abfragen, wovon ich aber nur das letzte Zeichen benötige.
Bin im Batch-Programmieren leider nicht wirklich bewnadt, habe mir das Ganze aber so vorgestellt:

01.
@echo off 
02.
echo Versions-Abfrage 
03.
echo. 
04.
echo Bitte IP-Adresse / Hostname eingeben: 
05.
set /p iphost= 
06.
echo. 
07.
echo Bitte warten... 
08.
 
09.
reg query \\%iphost%\HKLM\Software\aaa\bbb /v MajorVer | set maj= 
10.
set x=%maj:~-1% 
11.
reg query \\%iphost%\HKLM\Software\aaa\bbb /v MinorVer | set min= 
12.
set y=%min:~-1% 
13.
reg query \\%iphost%\HKLM\Software\aaa\bbb /v HotFix | set hfx= 
14.
set z=%hfx:~-1% 
15.
 
16.
echo Der Client %iphost% hat die Version: 
17.
echo %x%.%y%.%z% 
18.
Pause
Das liefert mir aber folgendes:

Versions-Abfrage 
 
Bitte IP-Adresse / Hostname eingeben: 
CLI123 
 
Bitte warten... 
Der Client CLI123 hat die Version: 
~-1.~-1.~-1 
Drücken Sie eine beliebige Taste . . .
Ich befürchte mal, dass der Ansatz schon falsch ist und ich mir das einfacher vorstelle, als es ist. Also: Die vorletzte ausgegebene Zeile sollte dann meinetwegen wie folgt aussehen:

2.6.14

Kann da jemand helfen?
Mitglied: andimue
31.10.2012 um 12:45 Uhr
Hi,
eine möglich Lösung (hier am Beispiel von 7-pdf):

01.
for /f "tokens=* delims= " %a in ('reg query hklm\software\7-pdf\wc /v CurrentVersion ^| find "CurrentVersion"') do set t_temp= %a && set t_lastdigit=%t:~-1% 
02.
 
03.
Ausgabe: 
04.
set t_temp= CurrentVersion       REG_SZ  1.0.3   && set t_lastdigit=3
Bitte warten ..
Mitglied: Possi1980
31.10.2012 um 13:16 Uhr
also, ich habe mal meine Codezeilen 09-14 gelöscht und dann deine stattdessen verwendet. Aber nach Eingabe des Hostnamens schließt sich die cmd-Box direkt wieder. :S
Bitte warten ..
Mitglied: andimue
31.10.2012 um 13:34 Uhr
Posten nochmal deinen kompletten Code und sag uns vllt. auch mal, auf was für einem Betriebssystem du ihn laufen läßt. Du kannst ja auch mal beispielhaft einen deiner Registryeinträge, die du damit abfrägst psoten.
Nur dann kann man dir qualifiziert helfen, denk ich.
Bitte warten ..
Mitglied: Exilschwaelmer
31.10.2012 um 13:41 Uhr
In einem Script muss '%a' in '%%a' geändert werden.
Bitte warten ..
Mitglied: andimue
31.10.2012 um 13:56 Uhr
@Exilschwaelmer: stimmt, das Kommando hab ich an der Kommandozeile eingegeben

@Possi1980: sollte es damit nicht funktionieren wäre der komplette Code + OS interessant
Bitte warten ..
Mitglied: Possi1980
31.10.2012 um 14:25 Uhr
Damit klappt es. Aber ich bekomme den ganzen Schlüssel zurückgeliefert.

Der Client CLI123 hat die Version:
FlagBaseMajorVersion REG_DWORD 0x1

Benötige aber nur das letzte Zeichen aus dem Schlüssel, also quasi nur die 1 nach dem x.

OS ist Win7 Enterprise 64 bit
Bitte warten ..
Mitglied: andimue
31.10.2012 um 14:56 Uhr
Ohne deine Skript kann ich dir leider nicht weiterhelfen
Bitte warten ..
Mitglied: Possi1980
31.10.2012 um 15:03 Uhr
Sorry, hier ist es

01.
@echo off 
02.
echo Versions-Abfrage 
03.
echo. 
04.
echo Bitte IP-Adresse / Hostname eingeben: 
05.
set /p iphost= 
06.
echo. 
07.
echo Bitte warten... 
08.
 
09.
for /f "tokens=* delims= " %%a in ('reg query \\%iphost%\HKLM\Software\Wow6432Node\SMSInventoryExtension /v FlagBaseMajorVersion ^| find "FlagBaseMajorVersion"') do set t_temp= %%a && set t_lastdigit=%t:~-1% 
10.
 
11.
echo Der Client %iphost% hat die Version: 
12.
echo %t_temp% 
13.
Pause
Bitte warten ..
Mitglied: mayho33
31.10.2012 um 15:10 Uhr
Hi!

Muss es BATCH sein beim Auslesen der Registry? Ich finde da VBSCRIPT wesentlich komfortabler:

Dim objShell : Set objShell = WScript.CreateObject("Wscript.Shell")
Dim objFso : Set objFso = WScript.CreateObject("Scripting.FileSystemObject")
Dim CDir : CDir = objFso.GetParentFolderName(WScript.ScriptFullName)

Dim Name, Version, Location
Name = objShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{26A24AE4-039D-4CA4-87B4-2F83216024FF}\DisplayName")
Version = objShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{26A24AE4-039D-4CA4-87B4-2F83216024FF}\DisplayVersion")
Location = objShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{26A24AE4-039D-4CA4-87B4-2F83216024FF}\InstallLocation")

WScript.Echo Name & " " & Version & " " & Location

Auf Wunsch kannst du auch einfach mit Left(), Right(), MID() oder Replace() arbeiten und die Ausgabe anpassen.

Lässt sich dann auch aus einer BATCH heraus aufrufen:

Start cscript "meineVBS.vbs" (gibt die Ausgabe in der Console aus)
start wscript "meineVBS.vbs" (Ausgabe in einer Massagebox)

je nachdem was von System her eingestellt ist schaut die Ausgabe ohne cscript, wscript unterschiedlich aus.
Bitte warten ..
Mitglied: andimue
31.10.2012 um 15:23 Uhr
probier mal:

01.
@echo off 
02.
echo Versions-Abfrage 
03.
echo. 
04.
echo Bitte IP-Adresse / Hostname eingeben: 
05.
set /p iphost= 
06.
echo. 
07.
echo Bitte warten... 
08.
 
09.
for /f "tokens=* delims= 	" %%a in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MediaPlayer\Setup /v PlaylistsVersion ^| find "PlaylistsVersion"') do ( 
10.
set "t_temp= %%a"  
11.
set "t_lastdigit=%t_temp:~-1%" 
12.
13.
 
14.
echo Der Client %iphost% hat die Version: 
15.
echo %t_lastdigit% 
16.
Pause
Hinter "delims=" ist ein Blank und ein Tab drin !
Bitte warten ..
Mitglied: bastla
31.10.2012, aktualisiert um 15:41 Uhr
@ andimue
Hinter "delims=" ist ein Blank und ein Tab drin !
Nur als Anmerkung: Blank und TAB sind einerseits ohnehin Default, andererseits willst Du ja offensichtlich die gesamte Zeile - dann genügt auch
for /f "delims=" %%a in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MediaPlayer\Setup /v PlaylistsVersion ^| find "PlaylistsVersion"') do (
Das Entnehmen des letzten Zeichens solltest du allerdings nicht innerhalb der "for"-Schleife, sondern erst danach durchführen (Stichwort: "delayedExpansion") - daher solltest Du so:
01.
for /f "delims=" %%a in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MediaPlayer\Setup /v PlaylistsVersion ^| find "PlaylistsVersion"') do set "t_temp=%%a"  
02.
set "t_lastdigit=%t_temp:~-1%"
eher Erfolg haben ...

Grüße
bastla
Bitte warten ..
Mitglied: Possi1980
31.10.2012, aktualisiert um 15:46 Uhr
Das liefert mir leider auch wieder nur folgende Ausgabe: ~-1

Ok, mit dem unteren Code hat es nun endlich geklappt. Den Rest bastel ich mir dann so zusammen.
Vielen Dank erstmal für die ganze Hilfe. Wünsche allen einen schönen Feiertag morgen!
Bitte warten ..
Mitglied: pieh-ejdsch
31.10.2012, aktualisiert um 17:05 Uhr
moin,

wenn da nur das x ist:
01.
set "Key=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MediaPlayer\Setup" 
02.
for /f "Tokens=1,2 delims=x" %%a in (' reg query %key% ') do for /f %%a in ("%%a") do set "%%a=%%b" 
03.
  
04.
echo %MajorVer%.%MinorVer%.%HotFix% 
05.
Pause 
Gruß Phil
Bitte warten ..
Mitglied: andimue
02.11.2012 um 10:33 Uhr
@bastla:

Danke für den Tipp und natürlich hast du recht mit der "delayedexpansion". Interessanterweise hab ich es, wie von mir beschrieben ausprobiert und es hat funktioniert.
Liegt möglicherweise daran, dass nur 1 Schleifendurchlauf gemacht wurde, ab dem 2.Loop hätte es dann wohl nicht mehr funktioniert, oder?

Aber auf jeden Fall vielen Dank für den Hinweis
Bitte warten ..
Mitglied: bastla
02.11.2012 um 11:50 Uhr
Hallo andimue!
Liegt möglicherweise daran, dass nur 1 Schleifendurchlauf gemacht wurde, ab dem 2.Loop hätte es dann wohl nicht mehr funktioniert, oder?
Es dürfte überhaupt nicht funktionieren - allerdings hast Du auch kein "setlocal" verwendet, sodass "%t_temp%" vermutlich noch den Inhalt des vorhergegangenen Tests hatte ...

Grüße
bastla
Bitte warten ..
Mitglied: andimue
02.11.2012 um 12:49 Uhr
Hallo bastla,

auch da hast du wieder zu 100% den Nagel auf den Kopf getroffen. %t_temp% wird natürlich während der for-Schleife überhaupt nicht mehr verändert und da die Variable vorher nicht definiert war klappt es überhaupt nicht. Es hat nur geklappt, weil die Variable t_temp aus einem vorherigen Test schon versorgt war.
So ist das halt mit quick & dirty

Wird Zeit, dass das Wochenende kommt ...

Freundliche Grüße
Andi
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

Batch & Shell
gelöst In Batch variable DOS-Funktion von "größer" und "kleiner" Zeichen unterdrücken (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Windows Systemdateien
gelöst Registry-Schlüssel per Batch auslesen und in Datei schreiben (9)

Frage von Philzip zum Thema Windows Systemdateien ...

Windows Server
gelöst SCCM2012 Abfrage eines Registry Wertes (5)

Frage von busteron zum Thema Windows Server ...

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 ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...