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

Fehlersuche - Falsche Aussgabe in txt

Frage Entwicklung Batch & Shell

Mitglied: kkboy94

kkboy94 (Level 1) - Jetzt verbinden

14.06.2010, aktualisiert 17:45 Uhr, 3267 Aufrufe, 13 Kommentare

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:
01.
@echo off & setlocal 
02.
chcp 1252>nul 
03.
set ue=ü 
04.
set ae=ä 
05.
set oe=ö 
06.
set Uue=Ü 
07.
set Aae=Ä 
08.
set Ooe=Ö 
09.
set ss=ß 
10.
chcp 850>nul 
11.
title Backupper f%ue%r CoD4 
12.
 
13.
echo Das Programm wird gestartet. 
14.
echo. 
15.
echo Bitte Warten... 
16.
echo. 
17.
echo.  
18.
echo.  
19.
 
20.
set "installpath=" 
21.
 
22.
cd %CD% 
23.
if exist Backup\Players/nul goto check  
24.
md "%CD%\Backup\Players" 
25.
 
26.
:check 
27.
if exist Backup/nul goto cont  
28.
md "%CD%\Backup" 
29.
goto cont 
30.
 
31.
:restart1 
32.
echo Sie haben eine leere Auswahl getroffen.  
33.
echo Bitte die Auswahl wiederholen. 
34.
echo. 
35.
:cont 
36.
echo Taste S = Key und die Profile sichern 
37.
echo Taste W = Profile wiederherstellen 
38.
echo Taste X = Programm schlie%ss%en 
39.
echo. 
40.
set "question1=" 
41.
set /p question1=Bitte S  oder  W  oder  X  eingeben:  
42.
if not defined question1 goto :restart1 
43.
if /i %question1:~,1%==S goto :backup 
44.
if /i %question1:~,1%==W goto :copy 
45.
if /i %question1:~,1%==x goto :endalt 
46.
echo. 
47.
echo Sie haben keine der 3 Aktionen gew%ae%hlt. 
48.
echo Das Programm wird nun geschlossen. 
49.
ping localhost -n 5 >nul 
50.
goto :eof 
51.
 
52.
:copy 
53.
echo Die Profile werden nun wiederhergestellt: 
54.
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4" /V InstallPath >NUL 2>&1 
55.
IF %ERRORLEVEL% == 1 ( 
56.
   GOTO enderror 
57.
) ELSE ( 
58.
   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" 
59.
60.
xcopy "%CD%\Backup\Players" "%installpath%players" /S /E /Y /I /Q 
61.
if %errorlevel% == 1 ( 
62.
 goto enderror 
63.
 ) else ( 
64.
 echo Die Dateien wurden erfolgreich kopiert. 
65.
66.
goto end 
67.
 
68.
 
69.
:backup 
70.
set "codkey=" 
71.
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4" /V codkey >NUL 2>&1 
72.
IF %ERRORLEVEL% == 1 ( 
73.
   GOTO enderror 
74.
) ELSE ( 
75.
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" 
76.
if not defined codkey goto :enderror 
77.
echo #%codkey%# 
78.
set "key=%codkey:~,4%-%codkey:~4,4%-%codkey:~8,4%-%codkey:~12,4%-%codkey:~16%" 
79.
echo Ihr aktueller Key ist %key% 
80.
echo Er befindet sich im Backup-Ordner 
81.
> "Backup\codkey.txt" echo Der gesicherte Schlüssel ist: 
82.
>>"Backup\codkey.txt" echo %key% 
83.
>>"Backup\codkey.txt" echo Bewahren sie den Key bis zu nächsten Neuinstallation von CoD4 auf. 
84.
>>"Backup\codkey.txt" echo Sie können den Key dann wieder zu Installation nutzen, und haben zudem die passenden Profile für den Key. 
85.
86.
 
87.
echo Die Profile werden nun gesichert: 
88.
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4" /V InstallPath >NUL 2>&1 
89.
IF %ERRORLEVEL% == 1 ( 
90.
   GOTO enderror 
91.
) ELSE ( 
92.
   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" 
93.
94.
xcopy "%installpath%\players" "%CD%\Backup\Players\" /S /E /Y /I /Q 
95.
if %errorlevel% == 1 ( 
96.
 goto enderror 
97.
 ) else ( 
98.
 echo Die Dateien wurden erfolgreich kopiert. 
99.
100.
goto :end 
101.
 
102.
:endalt 
103.
echo Sie haben das Programm ge%oe%ffnet, um es zu schlie%ss%en 
104.
echo Das ist eine berauschende Logik 
105.
echo Danke f%ue%r die Benutzung meines Programms 
106.
echo Das Programm wird nun geschlossen. 
107.
ping localhost -n 5 >nul 
108.
goto :eof 
109.
:end 
110.
echo Danke f%ue%r die Benutzung meines Programms 
111.
echo Der Vorgang wurde abgeschlossen 
112.
echo Beliebige Taste zum Beenden dr%ue%cken. 
113.
pause >nul 
114.
goto :eof 
115.
:enderror 
116.
echo ERROR:Es ist ein Fehler aufgetreten! 
117.
echo Das Programm wird nun geschlossen. 
118.
ping localhost -n 5 >nul 
119.
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.
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
Mitglied: tag123
14.06.2010 um 18:01 Uhr
Glaube Zeile 70.
Da wird der variable %codkey% nur ein " zugewiesen.
Bitte warten ..
Mitglied: kkboy94
14.06.2010 um 18:03 Uhr
Danke für die Antwort, aber in dieser Zeile wird die Variable nur zurückgesetzt (bekommt einen leeren Wert) und wird ja nachher anderweitig wieder gesetzt.

MfG Karsten
Bitte warten ..
Mitglied: Miyamoto
14.06.2010 um 18:04 Uhr
Hi,
ich würde mal statt den % Zeichen das ! Zeichen verwenden.
Das könnte helfen.

Edit: nach dem du das erste mal die Variable initialisiert hast

Gruß Miyamoto
Bitte warten ..
Mitglied: kkboy94
14.06.2010 um 18:10 Uhr
Du meinst:
Alle % mit ! austauschen?
Bitte warten ..
Mitglied: masterofdisaster09
14.06.2010 um 18:45 Uhr
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?
Bitte warten ..
Mitglied: tag123
14.06.2010 um 19:19 Uhr
probier mal statt:
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4" /V codkey
dass:
REG QUERY "hklm\software\Activision\Call of Duty 4" /v codkey
Bitte warten ..
Mitglied: Biber
14.06.2010 um 19:22 Uhr
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
Bitte warten ..
Mitglied: bastla
14.06.2010 um 19:31 Uhr
... wobei es ja genügen sollte, die Zeilen 71 - 74 (und die schließende Klammer in Zeile 85) durch die neue Zeile 71
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Activision\Call of Duty 4" /V codkey >NUL 2>&1 || goto :enderror
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 ...
Bitte warten ..
Mitglied: masterofdisaster09
14.06.2010 um 19:31 Uhr
Ob du den Stammschlüssel ausschreibst oder die Kurzform nimmst, ist egal.
Bitte warten ..
Mitglied: Biber
14.06.2010 um 19:47 Uhr
[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..
[OT}
Bitte warten ..
Mitglied: kkboy94
15.06.2010 um 15:17 Uhr
Danke für die Hilfen. Ich werds bei Gelegnheit mal testen.

MfG Karsten
Bitte warten ..
Mitglied: Biber
15.06.2010 um 15:40 Uhr
Moin kkboy94,

Zitat von kkboy94:
Danke für die Hilfen. Ich werds bei Gelegnheit mal testen.

MfG Karsten

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]
Bitte warten ..
Mitglied: kkboy94
15.06.2010 um 17:18 Uhr
Entschuldigung, ich hatte mich nicht eindeutig ausgedrückt. Ich habe damit gemeint, dass ich die Lösungen alle mal ausprobieren werde, und schauen werde, welche die Richtige ist/war.
Es hat sich herausgestellt, dass du mit deiner Idee richtig lagst, und bastla dann halt noch so freundlich war, mir direkt eine kürzer und vorgefertigte Variante zu geben.

Ich habe mir dann auch nochmal deine Tipps zu Herzen genommen, und aufgeräumt:
01.
@ echo off & setlocal 
02.
chcp 1252>nul 
03.
set ue=ü 
04.
set ae=ä 
05.
set oe=ö 
06.
set Uue=Ü 
07.
set Aae=Ä 
08.
set Ooe=Ö 
09.
set ss=ß 
10.
chcp 850>nul 
11.
title Backupper f%ue%r CoD4 
12.
 
13.
echo Das Programm wird gestartet. 
14.
echo. 
15.
echo Bitte Warten... 
16.
echo. 
17.
echo.  
18.
echo.  
19.
 
20.
echo ::._Ben%oe%tigte Variablen werden gesetzt_.:: 
21.
echo. 
22.
echo Bitte Warten... 
23.
echo. 
24.
set "installpath=" 
25.
REG QUERY "hklm\SOFTWARE\Activision\Call of Duty 4" /V InstallPath >NUL 2>&1 || goto :enderror 
26.
FOR /F "Skip=2 tokens=2*" %%i IN ('reg query "hklm\SOFTWARE\Activision\Call of Duty 4" /V "InstallPath"') do set "installpath=%%j" 
27.
if not defined installpath goto :enderror 
28.
 
29.
set "codkey=" 
30.
REG QUERY "hklm\SOFTWARE\Activision\Call of Duty 4" /V codkey >NUL 2>&1 || goto :enderror 
31.
FOR /F "Skip=2 tokens=2*" %%i IN ('reg query "hklm\SOFTWARE\Activision\Call of Duty 4" /V "codkey"') do set "codkey=%%j" 
32.
if not defined codkey goto :enderror 
33.
 
34.
set "key=" 
35.
set "key=%codkey:~,4%-%codkey:~4,4%-%codkey:~8,4%-%codkey:~12,4%-%codkey:~16%" 
36.
 
37.
set "FS=" 
38.
set "FS=%temp%\GetFolderSize.vbs 
39.
 
40.
set "ZO=" 
41.
set "ZO=Backup\Players\profiles" 
42.
 
43.
set "Maxsize=" 
44.
set "Maxsize=0" 
45.
echo ::._Variablen wurden erfolgreich gesetzt_.:: 
46.
echo. 
47.
goto cont 
48.
 
49.
:restart1 
50.
echo Sie haben eine leere Auswahl getroffen.  
51.
echo Bitte die Auswahl wiederholen. 
52.
echo. 
53.
:cont 
54.
echo Taste S = Key und die Profile sichern 
55.
echo Taste W = Profile wiederherstellen 
56.
echo Taste X = Programm schlie%ss%en 
57.
echo. 
58.
set "question1=" 
59.
set /p question1=Bitte S  oder  W  oder  X  eingeben:  
60.
if not defined question1 goto :restart1 
61.
echo. 
62.
if /i %question1:~,1%==S goto :backup 
63.
if /i %question1:~,1%==W goto :copy 
64.
if /i %question1:~,1%==x goto :endalt 
65.
 
66.
 
67.
:copy 
68.
if not exist Backup\Players\profiles/nul goto :nota  
69.
echo WScript.Echo Int(CreateObject("Scripting.FileSystemObject").GetFolder(WScript.Arguments(0)).Size/1024/1024+.99)>%FS% 
70.
for /f %%i in ('cscript //nologo %FS% "%ZO%"') do set OGr=%%i 
71.
del %FS% 
72.
if %OGr% EQU %Maxsize% goto :nota 
73.
echo Die Profile werden nun wiederhergestellt: 
74.
xcopy "Backup\Players" "%installpath%players" /S /E /Y /I /Q 
75.
if %errorlevel% == 1 goto :enderror 
76.
echo Die  Profile wurden erfolgreich wiederhergestellt. 
77.
goto end 
78.
 
79.
 
80.
:backup 
81.
echo. 
82.
echo ::._Ben%oe%tigte Verzeichnisse werden erstellt_.:: 
83.
echo. 
84.
echo Bitte Warten... 
85.
echo. 
86.
 
87.
md "Backup" 2>nul 
88.
md "Backup\Players" 2>nul 
89.
 
90.
echo ::._Verzeichnisse wurden erfolgreich erstellt_.:: 
91.
echo. 
92.
echo. 
93.
echo. 
94.
echo Ihr aktueller Key ist "%key%" 
95.
echo Er befindet sich im Backup-Ordner (codkey.txt) 
96.
> "Backup\codkey.txt" echo Der gesicherte Schlüssel ist: 
97.
>>"Backup\codkey.txt" echo %key% 
98.
>>"Backup\codkey.txt" echo Bewahren sie den Key bis zu nächsten Neuinstallation von CoD4 auf. 
99.
>>"Backup\codkey.txt" echo Sie können den Key dann wieder zu Installation nutzen, und haben zudem die passenden Profile für den Key 
100.
echo. 
101.
echo Die Profile werden nun gesichert: 
102.
xcopy "%installpath%\players" "Backup\Players\" /S /E /Y /I /Q 
103.
if %errorlevel% == 1 goto :enderror 
104.
echo Die  Profile wurden erfolgreich gesichert. 
105.
goto :end 
106.
 
107.
 
108.
:endalt 
109.
echo Sie haben das Programm ge%oe%ffnet, um es zu schlie%ss%en 
110.
echo Das ist eine berauschende Logik 
111.
echo Danke f%ue%r die Benutzung meines Programms 
112.
echo Das Programm beendet sich von selbst 
113.
ping localhost -n 5 >nul 
114.
goto :eof 
115.
:end 
116.
color 2F 
117.
echo. 
118.
echo Der Vorgang wurde abgeschlossen 
119.
echo Danke f%ue%r die Benutzung meines Programms 
120.
if /i %question1:~,1%==S goto :S 
121.
if /i %question1:~,1%==W goto :W 
122.
:S 
123.
color 2F 
124.
echo Der Ordner "Backup" wird beim Beenden ge%oe%ffnet 
125.
echo Beliebige Taste zum Beenden dr%ue%cken 
126.
pause >nul 
127.
start "Backup" "Backup" 
128.
goto :eof 
129.
:W 
130.
color 2F 
131.
echo Der CoD4-Ordner wird beim Beenden ge%oe%ffnet 
132.
echo Beliebige Taste zum Beenden dr%ue%cken 
133.
pause >nul 
134.
start "CoD4" "%installpath%" 
135.
goto :eof 
136.
:enderror 
137.
color 4F 
138.
echo !!ERROR:Es ist ein Fehler aufgetreten!! 
139.
echo Das Programm wird nun geschlossen 
140.
ping localhost -n 5 >nul 
141.
goto :eof 
142.
:nota 
143.
color 4F 
144.
echo !!ERROR:Es sind keine Profile vorhanden!! 
145.
echo Das Programm wird nun geschlossen 
146.
ping localhost -n 5 >nul 
147.
pause >nul 
148.
goto :eof
DANKE Nochmal allen die sich die Mühe geamcht haben, den Fehler zu finden.

MfG Karsten
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Falsche Umlaute beim auslesen einer .txt mit batch (2)

Frage von pdiddo zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Webentwicklung
gelöst HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Batch & Shell
Merkwürdige Zeilenformatierung in txt Datei (3)

Frage von miczar zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...