Fehlersuche - Falsche Aussgabe in txt
Hallo Forum,
ich habe letztens eine Batch geschrieben, welche einen Wert aus der Registry aussliest und ihn schön verpackt in eine txt speichert. Es sind auch noch andere Funktionen enthalten, wie z.B. eine Backup Funktion oder eine Wiederherstellmöglichkeit der gesicherten Daten.
Als erstes mal den Code der kompletten Datei:
Nun kommt bei der codkey.txt folgendes raus
In der Batch wird der Key auch nicht genannt.
Den Inhalt der Zeile 77 hat mir bastla schon per PN geschickt.
Die Variable scheint leer zu sein, was aber eigentlich nicht sein kann da die batch beim Ausführen nicht zu :enderror springt.
Könnt ihr den Fehler entdecken und mir helfen ihn zu beheben?
Danke schonmal
MfG Karsten
ich habe letztens eine Batch geschrieben, welche einen Wert aus der Registry aussliest und ihn schön verpackt in eine txt speichert. Es sind auch noch andere Funktionen enthalten, wie z.B. eine Backup Funktion oder eine Wiederherstellmöglichkeit der gesicherten Daten.
Als erstes mal den Code der kompletten Datei:
@echo off & setlocal
chcp 1252>nul
set ue=ü
set ae=ä
set oe=ö
set Uue=Ü
set Aae=Ä
set Ooe=Ö
set ss=ß
chcp 850>nul
title Backupper f%ue%r CoD4
echo Das Programm wird gestartet.
echo.
echo Bitte Warten...
echo.
echo.
echo.
set "installpath="
cd %CD%
if exist Backup\Players/nul goto check
md "%CD%\Backup\Players"
:check
if exist Backup/nul goto cont
md "%CD%\Backup"
goto cont
:restart1
echo Sie haben eine leere Auswahl getroffen.
echo Bitte die Auswahl wiederholen.
echo.
:cont
echo Taste S = Key und die Profile sichern
echo Taste W = Profile wiederherstellen
echo Taste X = Programm schlie%ss%en
echo.
set "question1="
set /p question1=Bitte S oder W oder X eingeben:
if not defined question1 goto :restart1
if /i %question1:~,1%==S goto :backup
if /i %question1:~,1%==W goto :copy
if /i %question1:~,1%==x goto :endalt
echo.
echo Sie haben keine der 3 Aktionen gew%ae%hlt.
echo Das Programm wird nun geschlossen.
ping localhost -n 5 >nul
goto :eof
:copy
echo Die Profile werden nun wiederhergestellt:
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4" /V InstallPath >NUL 2>&1
IF %ERRORLEVEL% == 1 (
GOTO enderror
) ELSE (
FOR /F "Skip=2 tokens=2*" %%i IN ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4" /V "InstallPath"') do set "installpath=%%j"
)
xcopy "%CD%\Backup\Players" "%installpath%players" /S /E /Y /I /Q
if %errorlevel% == 1 (
goto enderror
) else (
echo Die Dateien wurden erfolgreich kopiert.
)
goto end
:backup
set "codkey="
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4" /V codkey >NUL 2>&1
IF %ERRORLEVEL% == 1 (
GOTO enderror
) ELSE (
FOR /F "Skip=2 tokens=2*" %%i IN ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4" /V "codkey"') do set "codkey=%%j"
if not defined codkey goto :enderror
echo #%codkey%#
set "key=%codkey:~,4%-%codkey:~4,4%-%codkey:~8,4%-%codkey:~12,4%-%codkey:~16%"
echo Ihr aktueller Key ist %key%
echo Er befindet sich im Backup-Ordner
> "Backup\codkey.txt" echo Der gesicherte Schlüssel ist:
>>"Backup\codkey.txt" echo %key%
>>"Backup\codkey.txt" echo Bewahren sie den Key bis zu nächsten Neuinstallation von CoD4 auf.
>>"Backup\codkey.txt" echo Sie können den Key dann wieder zu Installation nutzen, und haben zudem die passenden Profile für den Key.
)
echo Die Profile werden nun gesichert:
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4" /V InstallPath >NUL 2>&1
IF %ERRORLEVEL% == 1 (
GOTO enderror
) ELSE (
FOR /F "Skip=2 tokens=2*" %%i IN ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4" /V "InstallPath"') do set "installpath=%%j"
)
xcopy "%installpath%\players" "%CD%\Backup\Players\" /S /E /Y /I /Q
if %errorlevel% == 1 (
goto enderror
) else (
echo Die Dateien wurden erfolgreich kopiert.
)
goto :end
:endalt
echo Sie haben das Programm ge%oe%ffnet, um es zu schlie%ss%en
echo Das ist eine berauschende Logik
echo Danke f%ue%r die Benutzung meines Programms
echo Das Programm wird nun geschlossen.
ping localhost -n 5 >nul
goto :eof
:end
echo Danke f%ue%r die Benutzung meines Programms
echo Der Vorgang wurde abgeschlossen
echo Beliebige Taste zum Beenden dr%ue%cken.
pause >nul
goto :eof
:enderror
echo ERROR:Es ist ein Fehler aufgetreten!
echo Das Programm wird nun geschlossen.
ping localhost -n 5 >nul
goto :eof
Nun kommt bei der codkey.txt folgendes raus
Der gesicherte Schlüssel ist:
ECHO ist ausgeschaltet (OFF).
Bewahren sie den Key bis zu nächsten Neuinstallation von CoD4 auf.
Sie können den Key dann wieder zu Installation nutzen, und haben zudem die passenden Profile für den Key.
Den Inhalt der Zeile 77 hat mir bastla schon per PN geschickt.
Die Variable scheint leer zu sein, was aber eigentlich nicht sein kann da die batch beim Ausführen nicht zu :enderror springt.
Könnt ihr den Fehler entdecken und mir helfen ihn zu beheben?
Danke schonmal
MfG Karsten
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 144812
Url: https://administrator.de/contentid/144812
Ausgedruckt am: 05.11.2024 um 18:11 Uhr
13 Kommentare
Neuester Kommentar
Moin!
Öffne mal eine Dos-Box und probiere mit folgender Zeile rum:
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4"
bzw.
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4" /V codkey
Da muss dann als Ausgabe der Key genannt werden. Wenn nicht, ist schon die Abfrage nicht stimmig. Heisst der Eintrag für den Key in der Registry tatsächlich codkey?
Öffne mal eine Dos-Box und probiere mit folgender Zeile rum:
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4"
bzw.
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4" /V codkey
Da muss dann als Ausgabe der Key genannt werden. Wenn nicht, ist schon die Abfrage nicht stimmig. Heisst der Eintrag für den Key in der Registry tatsächlich codkey?
Moin kkboy94,
nun ändere nicht überall gleichzeitig, weil ganz viele helfen wollen und alle ganz unterschiedliche Verdachtsmomente äußern...
In der Zeile 72 öffnest du ein "IF ( ... ) ELSE ( )" -Konstrukt, das rein optisch erst in Zeile 85 endet.
Für den Commandinterpreter CMD.exe ist es allerdings nach wie vor eine Befehlszeile.
Und da das Setzen einer Variable immer erst (für die CMD.exe) in der Folgezeile relevant wird, haben %codkey% und %key%,
die beide innerhalb einer Befehlszeile gesetzt werden und ausgelesen werden sollen, die falschen Werte.
Schau dir im Vergleich das IF-Konstrukt von Zeile 89-93 an... da klappt es, weil die innerhalb der Programmzeile gesetzte Variable erst nach dem Ende der Programmzeile wieder gelesen/verwendet wird.
--> also entweder "sauber" arbeiten == in einer Programmzeile die Variablen setzen, aber erst in der nächsten Programmzeile verwenden
--> oder aber mit "verzögerter Variablenauflösung", neudeutsch delayed expansion arbeiten.
Variante 1 ist meine Empfehlung in der Batch-Lernphase.
Da ich aber weiss, wie es 16jährige machen werden: EnableDelayedExpansion ist in der Hilfe zu SetLocal beschrieben.
Und dürfte auch über die Forumssuche ein paarmal gefunden werden.
Grüße
Biber
nun ändere nicht überall gleichzeitig, weil ganz viele helfen wollen und alle ganz unterschiedliche Verdachtsmomente äußern...
In der Zeile 72 öffnest du ein "IF ( ... ) ELSE ( )" -Konstrukt, das rein optisch erst in Zeile 85 endet.
Für den Commandinterpreter CMD.exe ist es allerdings nach wie vor eine Befehlszeile.
Und da das Setzen einer Variable immer erst (für die CMD.exe) in der Folgezeile relevant wird, haben %codkey% und %key%,
die beide innerhalb einer Befehlszeile gesetzt werden und ausgelesen werden sollen, die falschen Werte.
Schau dir im Vergleich das IF-Konstrukt von Zeile 89-93 an... da klappt es, weil die innerhalb der Programmzeile gesetzte Variable erst nach dem Ende der Programmzeile wieder gelesen/verwendet wird.
--> also entweder "sauber" arbeiten == in einer Programmzeile die Variablen setzen, aber erst in der nächsten Programmzeile verwenden
--> oder aber mit "verzögerter Variablenauflösung", neudeutsch delayed expansion arbeiten.
Variante 1 ist meine Empfehlung in der Batch-Lernphase.
Da ich aber weiss, wie es 16jährige machen werden: EnableDelayedExpansion ist in der Hilfe zu SetLocal beschrieben.
Und dürfte auch über die Forumssuche ein paarmal gefunden werden.
Grüße
Biber
... wobei es ja genügen sollte, die Zeilen 71 - 74 (und die schließende Klammer in Zeile 85) durch die neue Zeile 71
zu ersetzen ...
(... und wenn Du schon dabei bist, entsorge auch gleich die Zeile 22 und alle weiteren sinnfreien %CD% ... )
Grüße
bastla
P.S.: Sorry - hatte vorhin wenig Zeit und daher nur einen flüchtigen Blick darauf geworfen ...
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4" /V codkey >NUL 2>&1 || goto :enderror
(... und wenn Du schon dabei bist, entsorge auch gleich die Zeile 22 und alle weiteren sinnfreien %CD% ... )
Grüße
bastla
P.S.: Sorry - hatte vorhin wenig Zeit und daher nur einen flüchtigen Blick darauf geworfen ...
[OT]
Jepp, masterofdisaster,
[OT}
Jepp, masterofdisaster,
Zitat von @masterofdisaster09:----
Ob du den Stammschlüssel ausschreibst oder die Kurzform nimmst, ist egal.
Genau das wollte ich doch auch nur ausdrücken ....es kommt nicht auf die Länge, sondern auf die richtige Technik und das Timing an..Ob du den Stammschlüssel ausschreibst oder die Kurzform nimmst, ist egal.
[OT}
Moin kkboy94,
hab ich jezz' nicht verstanden...
Du hast hier gepostet, weil der oben gepostete Batch abraucht.... nicht funktioniert oder so keinerlei Wert hat.
Entsprechend dem Titel "Fehlersuche... " sind auch schnell und zahlreich Hilfewillige gekommen und haben sich des Problems angenommen.
Nun biegst du einen knappen Tag später um die Ecke und schreibst :"ich werd bei Gelegenheit ma' testen.." ?????
Gestern war es noch ein Problem - heute hab ich es schon fast ganz vergessen?
Grüße
Biber
[Edit 17:42h] @kkboy94 Vielen Dank für die schnelle Rückmeldung und Klarstellung! Ich wollte/sollte auch nicht gleich überreagieren... [/Edit]
hab ich jezz' nicht verstanden...
Du hast hier gepostet, weil der oben gepostete Batch abraucht.... nicht funktioniert oder so keinerlei Wert hat.
Entsprechend dem Titel "Fehlersuche... " sind auch schnell und zahlreich Hilfewillige gekommen und haben sich des Problems angenommen.
Nun biegst du einen knappen Tag später um die Ecke und schreibst :"ich werd bei Gelegenheit ma' testen.." ?????
Gestern war es noch ein Problem - heute hab ich es schon fast ganz vergessen?
Grüße
Biber
[Edit 17:42h] @kkboy94 Vielen Dank für die schnelle Rückmeldung und Klarstellung! Ich wollte/sollte auch nicht gleich überreagieren... [/Edit]