Batch-Abfrage - 3 Schlüssel aus Registry abfragen, und nur das jeweils letzte Zeichen auf den Bildschirm ausgeben
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:
Das liefert mir aber folgendes:
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?
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:
@echo off
echo Versions-Abfrage
echo.
echo Bitte IP-Adresse / Hostname eingeben:
set /p iphost=
echo.
echo Bitte warten...
reg query \\%iphost%\HKLM\Software\aaa\bbb /v MajorVer | set maj=
set x=%maj:~-1%
reg query \\%iphost%\HKLM\Software\aaa\bbb /v MinorVer | set min=
set y=%min:~-1%
reg query \\%iphost%\HKLM\Software\aaa\bbb /v HotFix | set hfx=
set z=%hfx:~-1%
echo Der Client %iphost% hat die Version:
echo %x%.%y%.%z%
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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 193545
Url: https://administrator.de/forum/batch-abfrage-3-schluessel-aus-registry-abfragen-und-nur-das-jeweils-letzte-zeichen-auf-den-bildschirm-193545.html
Ausgedruckt am: 25.12.2024 um 02:12 Uhr
16 Kommentare
Neuester Kommentar
@Exilschwaelmer: stimmt, das Kommando hab ich an der Kommandozeile eingegeben
@Possi1980: sollte es damit nicht funktionieren wäre der komplette Code + OS interessant
@Possi1980: sollte es damit nicht funktionieren wäre der komplette Code + OS interessant
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.
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.
probier mal:
Hinter "delims=" ist ein Blank und ein Tab drin !
@echo off
echo Versions-Abfrage
echo.
echo Bitte IP-Adresse / Hostname eingeben:
set /p iphost=
echo.
echo Bitte warten...
for /f "tokens=* delims= " %%a in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MediaPlayer\Setup /v PlaylistsVersion ^| find "PlaylistsVersion"') do (
set "t_temp= %%a"
set "t_lastdigit=%t_temp:~-1%"
)
echo Der Client %iphost% hat die Version:
echo %t_lastdigit%
Pause
Hinter "delims=" ist ein Blank und ein Tab drin !
@ andimue
Das Entnehmen des letzten Zeichens solltest du allerdings nicht innerhalb der "
eher Erfolg haben ...
Grüße
bastla
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 auchfor /f "delims=" %%a in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MediaPlayer\Setup /v PlaylistsVersion ^| find "PlaylistsVersion"') do (
for
"-Schleife, sondern erst danach durchführen (Stichwort: "delayedExpansion
") - daher solltest Du so:for /f "delims=" %%a in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MediaPlayer\Setup /v PlaylistsVersion ^| find "PlaylistsVersion"') do set "t_temp=%%a"
set "t_lastdigit=%t_temp:~-1%"
Grüße
bastla
@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
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
Hallo andimue!
Grüße
bastla
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
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
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