itschlumpf
Goto Top

Registryeintrag mittels Batch auslesen und in ein File schreiben

Hallo zusammen,

ich habe das Forum bereits durchforstet und einige Beiträge über dieses Thema gefunden, jedoch werde ich leider nicht daraus schlau.
Mein Problem im moment ist, dass ich Computernamen aus einem Textfile lesen soll und dann einen bestimmten Registriewert dieser Computer in einem Textfile ablegen soll.

Das mit dem Textfile hab ich hinbekommen, aber wie das mit der Registry gehen soll weiß ich noch nicht so ganz. Ich habe hier einige Beiträge mit Schleifen gelesen, aber da kam ich noch nicht wirklich klar damit.

Ziel:
Batch starten -> Rechner aus Textdatei auslesen -> Reg key dieses Rechners auslesen -> in Textfile schreiben und nächster Rechner.

Vielen dank schonmal für die Hinweise und Tipps face-smile

Gruß
Schlumpf

Content-ID: 174168

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

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

BigWim
BigWim 05.10.2011 um 13:09:41 Uhr
Goto Top
Moin ITSchlumpf,

das mit den Schleifen und Auslesen aus einer Textdatein haben wir schon geübt face-wink

Das nächste Stichwort wäre dann reg query /?

Gruß
Markus

reg query \\%rechner%\HKLM\........ >%LogFile%
ITSchlumpf
ITSchlumpf 05.10.2011 um 13:17:10 Uhr
Goto Top
Hi,
danke für die Antwort.

Aber wie kann ich das machen, dass er mir nur einen Schlüssel ausliest?

reg query "\\nb235\HKLM\Software\Beckhoff\TwinCAT OPC Server4\Common" /f /v key >> \\nb235\D$\log.txt  
da schreibt er nur Schrott in das logfile. Hast mir da vll nen ansatz?

Gruß
Schlumpf

P.s. ja das mit dem Textdateien auslesen haben wir schon geübt :D
60730
60730 05.10.2011 um 13:21:10 Uhr
Goto Top
moinsen,

Ich habe......Die nummer mit dem Ross und dem Reiter so langsam satt

Nur mal so ein klitschkokleiner Tipp.

Reg query kann nur HKLM oder HKU auslesen, steckt der gesuchte Wert in einem anderen Ast, braucht es eine andere Lösung.

Gruß


edit
reg query "\\nb235\HKLM\Software\Beckhoff\TwinCAT OPC Server4\Common" /f /v key

/f wie force oder /f wie fucking manual oder /f wie falsch?
/edit
ITSchlumpf
ITSchlumpf 05.10.2011 um 13:25:56 Uhr
Goto Top
Hey Timo,

naja aber der Wert steckt doch in HKLM also stimmt doch der Ansatz oder sehe ich das falsch?

Gruß
Schlumpf
BigWim
BigWim 05.10.2011 um 15:06:11 Uhr
Goto Top
Moin ITSchlumpf,

naja aber der Wert steckt doch in HKLM also stimmt doch der Ansatz
Der Ansatz ja.

oder sehe ich das falsch?
Erst heute wurde mir wieder vor Augen geführt, wie ernst unser einer die Hilfetexte nehmen sollte!

Wie kommst Du zu diesen Parametern?

Wenn ich es so probiere, funktioniert es:
reg query hklm\SOFTWARE\bplan-solutions\xxx\xxxx /s

! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\bplan-solutions\xxx\xxx
    Benutzer    REG_SZ  Benutzername:
    Kennwort    REG_SZ  Kennwort:
    KS-Applikation      REG_SZ  xxx App

HKEY_LOCAL_MACHINE\SOFTWARE\bplan-solutions\xxx\xxx\LastPos

HKEY_LOCAL_MACHINE\SOFTWARE\bplan-solutions\xxx\xxx\Trace
    TraceDir    REG_SZ  C:\Programme\bplan-solutions\TRACE
    TraceLevel  REG_SZ  0
ITSchlumpf
ITSchlumpf 05.10.2011 um 15:28:17 Uhr
Goto Top
Da hast du recht BigWim. Mit dem Befehl

 
reg query "\\nb235\HKLM\Software\Beckhoff\TwinCAT OPC Server4\Common" /s  >> \\nb235\D$\sql.txt  

werden die Daten auch schön in das Textfile geschrieben.
Sobald ich aber den Befehl aus dem Batchfile starte, funktioniert das nicht mehr. Dann bleibt der Befehl hängen und macht garnichts mehr. Er lässt sich dann auch nicht mehr beenden.

Zudem noch etwas anderes. Ich brauche nicht den ganzen Schlüsselwert sondern nur den Wert des Schlüssel da es sich um einen Lizenzschlüssel handelt. Hier müsste ich ja eig eine For Schleife bauen, welche mir mittels token den 3. Abschnitt rausnimmt und in das Textfile schreibt.
Wie diese Schleife genau aussehen muss weiß ich jedoch noch nicht genau. Aber das bekomme ich vll mit hilfe von euch oder mittels tutorial ausm Forum bestimmt auch noch hin face-smile

Also falls dir grad was einfällt, wie ich das erste problem mit dem Textfile lösen kann, wäre mir schonmal sehr geholfen.

Gruß
Schlumpf
BigWim
BigWim 05.10.2011 um 15:53:54 Uhr
Goto Top
Sobald ich aber den Befehl aus dem Batchfile starte, funktioniert das nicht mehr. Dann bleibt der Befehl hängen und macht
garnichts mehr. Er lässt sich dann auch nicht mehr beenden.
Dann poste doch mal Dein aktuelles Script.

Zudem noch etwas anderes. Ich brauche nicht den ganzen Schlüsselwert sondern nur den Wert des Schlüssel da es sich um
einen Lizenzschlüssel handelt.
Dann warst Du mit dem /v schon auf dem richtigen Weg. Wir kommst Du auf das /f?
Lass es mal weg!

Also falls dir grad was einfällt, wie ich das erste problem mit dem Textfile lösen kann, wäre mir schonmal sehr
geholfen.
Es bleibt dabei. Bei Fehlersuche hat das echo off nix zu suchen.
a) findest Du die Stelle, die hängt - die meist eine andere ist, als vermutet (zumindest bei mir so)
b) siehst Du die Aufrufparameter. Vielleicht ist da ja noch was im argen ....

Gruß
Markus
ITSchlumpf
ITSchlumpf 05.10.2011 um 16:08:45 Uhr
Goto Top
Also da ich noch am rumprobieren bin, hab ich noch nicht viel code geschrieben war heute auch noch etwas beschäftigt.
Title RegEdit
setLocal
reg query "\\nb235\HKLM\Software\Beckhoff\TwinCAT OPC Server4\Common" /v key  >> \\nb235\D$\sql.txt  
pause
Mehr ist es momentan eig auch noch nicht. Mein erstes Ziel wäre eig erstmal den inhalt vom key auszulesen und dann später mittels schleife nur den lizenzschlüssel auszulesen.
Wenn ich den Code so laufen lass, bekomme ich den Fehler "Maximale Recursionstiefe für SetLocal erreicht". Ohne SetLocal steht das batch fenster einfach fest und macht nichts mehr.

Gruß

[Edit] Im Textfile steht wie in einer Schleife nur der Befehlscode immer und immer wieder. [/Edit]
60730
60730 05.10.2011 um 16:42:36 Uhr
Goto Top
Zitat von @ITSchlumpf:
[Edit] Im Textfile steht wie in einer Schleife nur der Befehlscode immer und immer wieder. [/Edit]

Lass mir radden - die Bätch nennt sich reg.bat

  • Setlocalrunde ist auch etwas flüssiger als flüssig.

  • Warum piepst du das auch noch nach d$ auf die gleiche Kiste?

So sieht der Kram bei mir aus, da läuft
reg query "\\antonnymisiert\HKLM\SOFTWARE\itschlumpf\123\abc dfg\common" /v key>>c:\script\test\schlumpf.ini  
! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\itschlumpf\123\abc dfg\common
    key	REG_SZ	ichweissnichtwasderhat
ITSchlumpf
ITSchlumpf 05.10.2011 um 16:50:42 Uhr
Goto Top
Omg Kopf -> Tisch -.-
Jo Reg.cmd kann ja net funktionieren bin zu blöd -.-
Danke Timo

Naja weil ich es einfach testen wollte, da brauch ich das Textfile ja nicht auf nen anderen Rechner schieben.
So jetzt noch die Schleife dann passt es.

Danke

Gruß
Schlumpf


[Edit] Zum Thema schleife.
for /f "tokens=3" %%i in ('reg query "HKLM\Software\Beckhoff\TwinCAT OPC Server4\Common"^|findstr "key"') do echo %%i>D:\schlumpf.txt  

Die Schleife hab ich hier im Forum gefunden, zu einem ähnlichen Problem. Ich weiß zwar net viel über Schleifen in Batch files aber ich glaube das sollte fast richtig sein ^^
Falls nicht, lasse mich gerne von etwas besserem beleren.

[/Edit]
60730
60730 05.10.2011 um 17:12:25 Uhr
Goto Top
Zitat von @ITSchlumpf:
[Edit] Zum Thema schleife.
for /f "tokens=3" %%i in ('reg query "HKLM\Software\Beckhoff\TwinCAT OPC Server4\Common"^|findstr "key"') do echo %%i>D:\schlumpf.txt  
Die Schleife hab ich hier im Forum gefunden, zu einem ähnlichen Problem. Ich weiß zwar net viel über Schleifen in
Batch files aber ich glaube das sollte fast richtig sein ^^
Falls nicht, lasse mich gerne von etwas besserem beleren.

[/Edit]

Diese Schleife sorgt nur dafür, dass nur der gewünschte Inhalt/Wert ausgegeben wird...

for %%a in (rechner.txt) do call :bastla %%a
goto :eof

::bastla
Ping -n 1 %1 |find "TTL" && for /f "tokens=3" %%i in ('reg query "\\%1\HKLM\Software\Beckhoff\TwinCAT OPC Server4\Common"^|findstr "key"') do (  
if not "%%i"=="" echo %1,%%i>D:\schlumpf.csv  

:eof
ITSchlumpf
ITSchlumpf 06.10.2011 um 08:45:50 Uhr
Goto Top
Danke für die Schleife. Sieht auch recht gut aus, aber leider schreibt er mir noch keinen Wert in die %%i Variable.
Mit dem "find" nach Ping kann ich da alles eingeben was in der Ping Ausgabe vorkommt? Weil wenn ich den Ping befehl vorne dran lass, überspringt er mir die for-Schleife.
Naja werd mal noch ein wenig dran rumbasteln. Muss ja irgendwie funktionieren.
Danke Timo und Markus.

Gruß
Schlumpf


Title RegEdit
SET pc=rechner.txt

for /f %%a in (%pc%) do call :bastla %%a
goto :eof 

:bastla 
Set eeepc=%1
REM ping -n 2 %eeepc% |find "Empfangen = 2" &&   
pause
for /f "tokens=3" %%i in ('reg query "\\%eeepc%\HKLM\Software\Beckhoff\TwinCAT OPC Server4\Common"^|findstr "key"') do ( if not "%%i"=="" echo %eeepc%, %%i > D:\schlumpf.csv )  
echo %eeepc%, %%i 
pause
:eof

[Edit]
Problem ist gelöst. Die Klammer am Schluss bei der if - Abfrage muss weg, dann klappt es.

Title RegEdit
SetLocal
SET pc=rechner.txt

for /f %%a in (%pc%) do call :bastla %%a
goto :eof 

:bastla 
Set eeepc=%1
ping -n 2 %eeepc% |find "Empfangen = 2" && for /f "tokens=3" %%i in ('reg query "\\%eeepc%\HKLM\Software\Beckhoff\TwinCAT OPC Server4\Common"^|findstr "Key"') do  if not "%%i"=="" echo %eeepc%, %%i > D:\schlumpf.csv   
:eof
BigWim
BigWim 06.10.2011 um 15:18:44 Uhr
Goto Top
Moin ITSchlumpf,

Jo Reg.cmd kann ja net funktionieren bin zu blöd -.-
Deswegen fangen meine Scripte grundsätzlich mit einem m an ... face-wink

Gruß
Markus
ITSchlumpf
ITSchlumpf 06.10.2011 um 15:39:03 Uhr
Goto Top
Sollte ich in Zukunft wohl auch machen face-smile

Gruß
Schlumpf