132749
31.12.2017, aktualisiert um 16:26:30 Uhr
1878
30
0
Registrierungtyp abgleichen per Batch
Hallo,
ich benötige wieder einmal eure Unterstützung!
Das nachfolgende Script soll erst ausgeführt werden wenn der Registrierungswert "2017" vorhanden ist!
Hinzugefügt werden soll nachfolgende Abfrage in das vorhandene Script:
HKLM\SOFTWARE\myProgramm "Version" reg_sz "2017"
Wie muss man da vorgehen?
Ich habe bereits das eine oder andere gegoogelt aber zu einem Ergebnis bin ich leider nicht gekommen!
ich benötige wieder einmal eure Unterstützung!
Das nachfolgende Script soll erst ausgeführt werden wenn der Registrierungswert "2017" vorhanden ist!
Hinzugefügt werden soll nachfolgende Abfrage in das vorhandene Script:
HKLM\SOFTWARE\myProgramm "Version" reg_sz "2017"
Wie muss man da vorgehen?
Ich habe bereits das eine oder andere gegoogelt aber zu einem Ergebnis bin ich leider nicht gekommen!
@echo off &setlocal
set "key=HKLM\SOFTWARE\myProgramm"
set "value=Drive"
set "validdata=CDEFX"
set "drive="
for /f "tokens=3" %%i in ('2^>nul reg query "%key%" /v "%value%" ^| findstr /reic:"\<[%validdata%]:*"') do set "drive=%%i"
if not defined drive (
echo Laufwerksbuchstabe ist nicht in %validdata% oder Key existiert nicht.
pause
exit /b
)
set "drive=%drive:~,1%:"
set "BEFOREDATE=%date:* =%"
date 11-01-2000
Start "" "%drive%\Programme\myProgramm\Start.exe" "%drive%\Programme\myProgramm\Start.INI"
ping -n 10 127.0.0.1 > NUL 2>&1
date %BEFOREDATE%
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 359579
Url: https://administrator.de/contentid/359579
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
30 Kommentare
Neuester Kommentar
reg query "HKLM\SOFTWARE\myProgramm" /v Version /f "2017" /d /e /t REG_SZ >nul 2>&1&& (
REM tu hier was
)
dann müsste es so aussehen wenn ich es richtig interpretiere
Nope. Entweder deine Schritte innerhalb von den Klammern einfügen oder eben das ganze stattdessen negieren und so am Anfang einfügen.reg query "HKLM\SOFTWARE\myProgramm" /v Version /f "2017" /d /e /t REG_SZ >nul 2>&1 || exit
Tja wenn du noch nie was von delayed expansion gehört hast wenn du Variablen innerhalb von Klammern setzt, ist klar daß es nicht will.
Deswegen beschäftige dich etwas damit dann verstehst du es auch , brauchst du hier aber wenn du die letzte Variante nützt auch nicht.
Deswegen beschäftige dich etwas damit dann verstehst du es auch , brauchst du hier aber wenn du die letzte Variante nützt auch nicht.
@echo off &setlocal
reg query "HKLM\SOFTWARE\myProgramm" /v Version /f "2017" /d /e /t REG_SZ >nul 2>&1 || exit
set "key=HKLM\SOFTWARE\myProgramm"
set "value=Drive"
set "validdata=CDEFX"
set "drive="
for /f "tokens=3" %%i in ('2^>nul reg query "%key%" /v "%value%" ^| findstr /reic:"\<[%validdata%]:*"') do set "drive=%%i"
if not defined drive (
echo Laufwerksbuchstabe ist nicht in %validdata% oder Key existiert nicht.
pause
exit /b
)
set "drive=%drive:~,1%:"
set "BEFOREDATE=%date:* =%"
date 11-01-2000
Start "" "%drive%\Programme\myProgramm\Start.exe" "%drive%\Programme\myProgramm\Start.INI"
ping -n 10 127.0.0.1 > NUL 2>&1
date %BEFOREDATE%
Lese deinen Satz nochmal in Ruhe durch.
Die Zeile lässt das Skript nur weiterlaufen wenn es einen REG_SZ Wert mit dem Namen Version gibt der den Inhalt "2017" hat, ansonsten beendet es sich ... so wie du wolltest ansonsten ist deine Schilderung missverständlich, hier läuft das.
Die Zeile lässt das Skript nur weiterlaufen wenn es einen REG_SZ Wert mit dem Namen Version gibt der den Inhalt "2017" hat, ansonsten beendet es sich ... so wie du wolltest ansonsten ist deine Schilderung missverständlich, hier läuft das.
Ich würde das jetzt so machen:
Habe das leicht angepasst, das er bei 64-Bit an der richtigen Ecke sucht. Da du anscheinend kein Delayed Expansion nutzen willst gehts so auch ohne. Du du jetzt die "2017" als Variable hast kannst jetzt alles damit anstellen, z.B das == durch LSS/GTR ersetzen, dass das Script nur ausgeführt wird wenn die neue Version größer/kleiner ist.
@echo off
for /f "skip=2 tokens=3" %%I in ('2^>nul reg query "HKLM\SOFTWARE\myProgramm" /v Version /reg:32') do set VERSION=%%I
if "%VERSION%"=="2017" (
@echo off &setlocal
set "key=HKLM\SOFTWARE\myProgramm"
set "value=Drive"
set "validdata=CDEFX"
set "drive="
for /f "tokens=3" %%i in ('2^>nul reg query "%key%" /v "%value%" ^| findstr /reic:"\<[%validdata%]:*"') do set "drive=%%i"
if not defined drive (
echo Laufwerksbuchstabe ist nicht in %validdata% oder Key existiert nicht.
pause
exit /b
)
set "drive=%drive:~,1%:"
set "BEFOREDATE=%date:* =%"
date 11-01-2000
Start "" "%drive%\Programme\myProgramm\Start.exe" "%drive%\Programme\myProgramm\Start.INI"
ping -n 10 127.0.0.1 > NUL 2>&1
date %BEFOREDATE%
)
Habe das leicht angepasst, das er bei 64-Bit an der richtigen Ecke sucht. Da du anscheinend kein Delayed Expansion nutzen willst gehts so auch ohne. Du du jetzt die "2017" als Variable hast kannst jetzt alles damit anstellen, z.B das == durch LSS/GTR ersetzen, dass das Script nur ausgeführt wird wenn die neue Version größer/kleiner ist.
Servus @132749,
bei meinen Vorgängern haben sich einige Fehler eingeschlichen, bei @135051 hat der reg query auch positive Rückmeldung gegeben wenn nur ein Version Eintrag egal welchen Jahres vorhanden war und @Kriegstreiber hat hier vergessen delayed expansion einzuschalten und "!" als Variablenbegrenzer zu nutzen.
Übernehme folgende Zeile in den Kopf deines vorhandenen Skripts und du hast das gewünschte Verhalten:
Frohes Neues
Grüße Uwe
bei meinen Vorgängern haben sich einige Fehler eingeschlichen, bei @135051 hat der reg query auch positive Rückmeldung gegeben wenn nur ein Version Eintrag egal welchen Jahres vorhanden war und @Kriegstreiber hat hier vergessen delayed expansion einzuschalten und "!" als Variablenbegrenzer zu nutzen.
Übernehme folgende Zeile in den Kopf deines vorhandenen Skripts und du hast das gewünschte Verhalten:
reg query "HKLM\SOFTWARE\WOW6432Node\myprogram" /v Version | findstr 2017 >nul 2>&1 || (echo Registryeintrag nicht gefunden &exit /b)
Grüße Uwe
Zitat von @132749:
@ colinardo,
auch deine Zeile funktioniert leider nicht!
Doch, das tut sie natürlich selbstverständlich! Sie wurde hier extra vorher nochmal getestet!@ colinardo,
auch deine Zeile funktioniert leider nicht!
Du wendest sie offensichtlich falsch an oder es hat sich bei dir noch ein Fehler eingeschlichen. Ein "@echo on" in deinem Skript wird es dir zeigen.
Hinzugefügt werden soll nachfolgende Abfrage in das vorhandene Script:
HKLM\SOFTWARE\myProgramm "Version" reg_sz "2017" + eine entsprechende Meldung wie in den Zeilen 11-19
Genau das tut die obige Zeile.HKLM\SOFTWARE\myProgramm "Version" reg_sz "2017" + eine entsprechende Meldung wie in den Zeilen 11-19
Hier also im Gesamten nochmal:
@echo off &setlocal
set "key=HKLM\SOFTWARE\Wow6432Node\myProgramm"
reg query "%key%" /v Version | findstr 2017 >nul 2>&1 || (echo Registryeintrag nicht gefunden, Programm wird beendet &exit /b)
set "value=Drive"
set "validdata=CDEFX"
set "drive="
for /f "tokens=3" %%i in ('2^>nul reg query "%key%" /v "%value%" ^| findstr /reic:"\<[%validdata%]:*"') do set "drive=%%i"
if not defined drive (
echo Mein Text1:
echo Mein Text2!
echo.
echo Mein Text3:
echo Mein Text4!
echo.
echo.
ping -n 20 127.0.0.1 > NUL 2>&1
exit /b
)
set "drive=%drive:~,1%:"
set "BEFOREDATE=%date:* =%"
date 01-01-2017
Start "" "%drive%\myProgramm\start.exe"
ping -n 10 127.0.0.1 > NUL 2>&1
date %BEFOREDATE%
Mein hinzugefügte Zeile:
reg query "%key%" /v Version | findstr 2017 >nul 2>&1 || (echo Registryeintrag nicht gefunden, Programm wird beendet &exit /b)
reg query "%key%" /v Version | findstr 2017 >nul 2>&1 || (
echo Registryeintrag nicht gefunden, Programm wird beendet
exit /b
)
So hoffe das klärt deine Fragen nun endgültig.
Viel Erfolg weiterhin.
Grüße Uwe
Absichtlich weggelassen, da ich es so verstanden habe, das er Delayed Extensions nicht nutzen will. Wenn er am Anfang seiner Batch setlocal setzt ist alles in Butter. Er muss ja %VERSION% nirgends anders mehr auflösen. Ansonsten kann er ja Delayed Expansion anmachen und das %VERSION% durch !VERSION! ersetzen, ich habe diese Funktion aber meist aus, mache die nur an wenn ich die wirklich brauche weil man damit auch viele Nachteile hat. Zudem vergesst ihr immer den Switch /reg:32 zu nutzen um das 32-Bit Reg anzusprechen, da die Keys bei ihm ja anscheinend in "WOW6432Node" sitzen und ihr mit dem 64-Bit reg da ewig unter "Software" suchen könnt ;).
Was müsste denn noch geändert werden damit das Script auch auf einem 32-Bit System läuft
S.o. Kriegstreibers Kommentar, den Registry-Pfad stattdessen unter "HKLM\SOFTWARE\myprogramm\Programm1" ansprechen und den Parameter /reg:32 setzen, oder alternativ die Umgebungsvariable checken und Key Variable setzenIF %PROCESSOR_ARCHITECTURE% == x86 (
REM Hier x86 code
)
Nun ja einfaches lesen hätte zwar auch gereicht, aber na gut ändere meine beiden Zeilen so ab
Bei Interesse an der Materie empfehle ich folgende Seite
https://msdn.microsoft.com/de-de/library/windows/desktop/aa384232(v=vs.8 ...
Wenn's das dann war bitte den Beitrag noch als gelöst markieren. Merci.
set "key=HKLM\SOFTWARE\myProgramm\Programm1"
reg query "%key%" /v Version /reg:32 | findstr 2017 >nul 2>&1 || (
https://msdn.microsoft.com/de-de/library/windows/desktop/aa384232(v=vs.8 ...
Wenn's das dann war bitte den Beitrag noch als gelöst markieren. Merci.
Leider bringt die Prozessor Architektur Abfrage nix, da ich auch auf AMD64 Prozessoren ein 32-Bit System fahren kann. Bei reg ist ja schön da gibts den Switch, leider gibt es sowas nicht für regedit.
Alternativ, so löse ich das, nimm einen BAT to exe Converter, die exe arbeitet wieder in der 32-Bit Ebene und das ganze wäre endgültig gelöst.
Alternativ, so löse ich das, nimm einen BAT to exe Converter, die exe arbeitet wieder in der 32-Bit Ebene und das ganze wäre endgültig gelöst.
Zitat von @Kriegstreiber:
Leider bringt die Prozessor Architektur Abfrage nix, da ich auch auf AMD64 Prozessoren ein 32-Bit System fahren kann.
Les doch dazu bitte malLeider bringt die Prozessor Architektur Abfrage nix, da ich auch auf AMD64 Prozessoren ein 32-Bit System fahren kann.
WOW64 Implementation Details
Die Variable bestimmt nicht die Architektur des "Prozessors" sondern in welchem Kontext der Prozess läuft.
Alternativ, so löse ich das, nimm einen BAT to exe Converter
Sorry, aber wenn es hier Downvotes gäbe ...
Steffen
Nein, gibt es nicht. Und die Tatsache dass diese Tools dein Script in der WOW64 VM ausführen, ist eher eines der unerwünschten Nebeneffekte als ein Feature. (Wobei unterschiedliche Tools das auch anders händeln könnten, was noch eine Unsicherheit mehr ist.)
Es gibt keinen Grund sie zu "mögen". Das gilt nicht nur für mich.
Steffen
Wenn du die nicht magst ist das ja Ok.
"To Exe Converter" für mehrere zusammenhängende vbs- und batch-Skripte?Es gibt keinen Grund sie zu "mögen". Das gilt nicht nur für mich.
Steffen
Bat to Exe kannst auch in die Tonne kloppen, für was gutes musste schon ein paar Euro zahlen ;)
http://www.battoexeconverter.com/buypro.html
Den nutze ich und hier ist z.B ein Virustotal Log meines letzten Tools das ich auf die Menschheit losliess:
https://www.virustotal.com/#/file/3e63e4a6e70bc5ab0b2b16d8de870636fd88a2 ...
Hier das Script, das du siehst, das ich da nicht eben nur nen 2 zeiler compiliert habe:
https://pastebin.com/tdq7ySgy
Und wenn da ein Malwarescanner anschlägt wäre es ratsam sich da mal einen vernünftigen anzuschaffen ;)
Womit du natürlich Recht hast ist, das ist nichts um ein Batch Script zu schützen. Das wird temporär im Temp folder ausgelagert.
Da müsste man andere Wege gehen, aber 100% kannst keines schützen. Auch das Administrator Manifest ist manchmal Gold wert ;), gerade wenn man mit Registry Einträgen rumspielt :D.
http://www.battoexeconverter.com/buypro.html
Den nutze ich und hier ist z.B ein Virustotal Log meines letzten Tools das ich auf die Menschheit losliess:
https://www.virustotal.com/#/file/3e63e4a6e70bc5ab0b2b16d8de870636fd88a2 ...
Hier das Script, das du siehst, das ich da nicht eben nur nen 2 zeiler compiliert habe:
https://pastebin.com/tdq7ySgy
Und wenn da ein Malwarescanner anschlägt wäre es ratsam sich da mal einen vernünftigen anzuschaffen ;)
Womit du natürlich Recht hast ist, das ist nichts um ein Batch Script zu schützen. Das wird temporär im Temp folder ausgelagert.
Da müsste man andere Wege gehen, aber 100% kannst keines schützen. Auch das Administrator Manifest ist manchmal Gold wert ;), gerade wenn man mit Registry Einträgen rumspielt :D.