kkboy94
Goto Top

Zeichenkette aus txt-Datei auslesen, teilen, und mit Trennzeichen versehen

Hey Leute

Ich weiß, das ist mein erster Beitrag
aber ich dachte es wär die beste idee, direkt hier zu Fragen, denn hier wurde mir schon oft geholfen.

Mein Problem sieht folgendermaßen aus:

Ich habe mir eine batch Datei geschrieben, die einen Wert aus der Registry ausliest und in einer Textdatei speichert.

Nun ist dieser Wert zusammenhängend und hat insgesamt 20 Zeichen die in jeweils 4er-Häppchen zerlegt werden sollen. Die Häppchen sollen dann durch Bindestriche getrennt werden.

Als Beispiel mal einen Wert, wie er aussehen könnte:
44T2SL8S8DDTYQ8E155F
am Ende soll dann sowas da stehen
44T2-SL8S-8DDT-YQ8E-155F

Ich hoffe, dass ihr mir helfen könnt.

Danke schonmal im Voraus


MfG Karsten

Content-ID: 144691

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

Printed on: November 10, 2024 at 08:11 o'clock

bastla
bastla Jun 11, 2010 at 22:15:05 (UTC)
Goto Top
Hallo kkboy94!

Eigentlich sollte es nicht nötig sein, eine Textdatei zu erstellen - poste doch bitte (unter "<code>"- "</code>"-Tags) Deinen bisherigen Batch ...
Um aber konkret auf Deine Frage zu antworten: Unter der Annahme, dass der angesprochene String in der ersten Zeile der Datei steht, könntest Du die gewünschte Formatierung so erhalten:
@echo off & setlocal
set /p Wert=<"D:\Die Textdatei.txt"  
set "Wert_formatiert=%Wert:~,4%-%Wert:~4,4%-%Wert:~8,4%-%Wert:~12,4%-%Wert:~16%"  
echo %Wert_formatiert%
Grüße
bastla
kkboy94
kkboy94 Jun 12, 2010 at 09:53:51 (UTC)
Goto Top
Erst einmal Danke für die schnelle Hilfe.
Ich werds mal ausprobieren.

Da die komplette Batch relativ lang ist, stelle ich hier nur mal den betreffenden Teil rein.
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"  
)
echo Ihr aktueller Key ist %codkey%
echo Er befindet sich im Backup-Ordner
echo %codkey% > "%CD%\codkey.txt"  
move "%CD%\codkey.txt" "%CD%\Backup\"  
Hoffe ihr könnt damit was anfangen.

PS:ch hab mir heut morgen dann auch nochmal Gedanken gemacht. Es stimmt ja schon, dass es unsinnig wäre eine Textdatei zu erstellen, aus zulesen, verändern und wieder ab zupspeichern.


MfG Karsten

EDIT:Wie würde das alles aussehen, wenn in der Textdatei noch mehrere Zeilen vor dem zu bearbeitenden String stehen?
Nachher soll der bearbeitete Wert wieder an die txt zurückgegeben werden
EDIT2:
set /p Wert=<"D:\Die Textdatei.txt"   
set "Wert_formatiert=%Wert:~,4%-%Wert:~4,4%-%Wert:~8,4%-%Wert:~12,4%-%Wert:~16%"   
Was bedeuten diese Zeilen? Manche Sachen sind mir noch unklar (Der Operator bei "set /p", und die vielen %, ~ und die Werte (4; 4,4; 8,4 usw...))

EDIT3:

@echo off & setlocal 
Das "@echo off" hab ich bei meinen Batchs auch immer vorne dran stehen, aber was hat setlocal für eine Bedutung?
bastla
bastla Jun 12, 2010 at 14:18:48 (UTC)
Goto Top
Hallo kkboy94!

Könntest Du, sobald das gesamte Konzept fertig ist, Dein Vorhaben vollständig darstellen (jetzt sieht es ja eher nach "Suchen / Ersetzen" aus, wobei ich nicht wüsste, nach welchem Begriff zu suchen wäre)?

In der Zwischenzeit sollte die Onlinehilfe
setlocal /?
set /?
Dir vielleich schon erste Anhaltspunkte zu Deinen Fragen liefern.

Was das "set /p" anlangt: Damit wird eine Eingabe, die mit Enter abgeschlossen wird, entgegengenommen und in der angegebenen Variable gespeichert - in diesem Fall kommt die "Eingabe" eben aus einer Datei (konkret: aus dem Beginn der Datei bis zum ersten Enter = aus der ersten Zeile der Datei) ...

Grüße
bastla
kkboy94
kkboy94 Jun 12, 2010 at 14:31:19 (UTC)
Goto Top
Also...
Der Sinn meines Vorhaben ist folgender:
Es soll eib Registrierungsschlüssel aus der Registry ausgelsen werden, in Stücke geteilt und in eine Textdatei abgelegt werden, damit man bei Neuinstallation den gleichen Schlüssel wieder benutzen kann.
Die Textdatei sollte dann so in etwa aussehen:
Der gesicherte Schlüssel ist:
44T2-SL8S-8DDT-YQ8E-155F
bastla
bastla Jun 12, 2010 at 15:13:48 (UTC)
Goto Top
Hallo kkboy94!
set "codkey="  
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
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%  
Grüße
bastla

P.S.: Die Verwendung von %cd% am Beginn einer Pfadangabe ist witzlos, da der aktuelle Pfad ja ohnehin schon %cd% ist ...
kkboy94
kkboy94 Jun 12, 2010 at 19:49:07 (UTC)
Goto Top
Hat super funktioniert. Danke für die Hilfe. Funktioniert 1a
set "key=%codkey:~,4%-%codkey:~4,4%-%codkey:~8,4%-%codkey:~12,4%-%codkey:~16%"   
Den Teil habe ich immer noch nicht verstanden.
So wie ich mir das nun denke ist dieser Teil ":~,4" für den ersten 4er-Block zuständig.
Demnach müsste ":~4,4" doch für den 2. 4er-Block da sein. Aber der zweite 4er Block hat doch das 8. Zeichen als letztes. Also warum ist der Teil dann nicht ":~8"
Das müsste mir noch erklärt werden.
Ausprobiert hab ichs schon --> es ist so wies sein sollte, aber ich verstehs halt nich.


MfG Karsten
bastla
bastla Jun 12, 2010 at 22:17:17 (UTC)
Goto Top
Hallo kkboy94!

Die beiden Werte bedeuten
  • Offset (wieviele Zeichen vom Anfang weg sollen übersprungen werden (beim ersten Teilstring steht nix vor dem Komma, was mit 0 oder mit "Fang ganz vorne an!" gleichzusetzen ist)
  • Zeichenanzahl (daher immer 4)

Grüße
bastla
kkboy94
kkboy94 Jun 13, 2010 at 09:03:42 (UTC)
Goto Top
Ahh ok gut, danke für die Hilfe bastla.


MfG Karsten