Ein Wort aus Batch isolieren
Hi,
und zwar möchte ich wie der Name schon sagt gerne ein
bestimmtest Wort aus einer .txt bzw. .bat auslesen und
als variable weiter verarbeiten.
hier der Text der mir vorliegt:
! REG.EXE VERSION 3.0
HKEY_CURRENT_USER\RemoteAccess\Profile\
HKEY_CURRENT_USER\RemoteAccess\Profile\\Alice
und zwar benötige ich das jeweils letzte Wort in diesem
Beispiel "Alice". Mein erster Gedanke war es mit %patch~5,40%
zu versuchen leider klappte das nicht.
Was ist der Fehler und wie mache ich es richtig?
und zwar möchte ich wie der Name schon sagt gerne ein
bestimmtest Wort aus einer .txt bzw. .bat auslesen und
als variable weiter verarbeiten.
hier der Text der mir vorliegt:
! REG.EXE VERSION 3.0
HKEY_CURRENT_USER\RemoteAccess\Profile\
HKEY_CURRENT_USER\RemoteAccess\Profile\\Alice
und zwar benötige ich das jeweils letzte Wort in diesem
Beispiel "Alice". Mein erster Gedanke war es mit %patch~5,40%
zu versuchen leider klappte das nicht.
Was ist der Fehler und wie mache ich es richtig?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 63295
Url: https://administrator.de/forum/ein-wort-aus-batch-isolieren-63295.html
Ausgedruckt am: 11.04.2025 um 18:04 Uhr
8 Kommentare
Neuester Kommentar

Von hinten abziehen und Länge angeben:
set patch=%patch:~-5,6%
Das geht natürlich nur, wenn der Text immer gleich bzw. gleich lang ist.
set patch=%patch:~-5,6%
Das geht natürlich nur, wenn der Text immer gleich bzw. gleich lang ist.
Versuchs mal so:
1. Leite die Ausgabe in ein Textfile um.
2. Filtere das Textfile nach dem gewünschten Wort (hier: Alice) und leite das Ergebnis in ein
zweites txt um.
Konkret sieht das so aus:
find /i "alice" <Kompletter Pfad der Txt-Datei> >>c:\text2.txt
3. Folgende Zeile filtert das Wort "Alice" aus der letzten Zeile heraus und schreibt dieses in ein
drittes TXT :
@for /F "tokens=1,2,3,4,5 delims=\ " %%a in (<Kompletter Pfad der zweiten TXT>) do echo %%e >>c:\final.txt
Somit hast du ein Textfile final.txt mit dem gesuchten Wort als Inhalt (nicht getestet).
Wie man den Inhalt eines TXTs direkt in eine Variable schreibt, weiss ich leider nicht genau, ich hoffe aber, dass dir damit zumindest ein bisschen geholfen ist.
1. Leite die Ausgabe in ein Textfile um.
2. Filtere das Textfile nach dem gewünschten Wort (hier: Alice) und leite das Ergebnis in ein
zweites txt um.
Konkret sieht das so aus:
find /i "alice" <Kompletter Pfad der Txt-Datei> >>c:\text2.txt
3. Folgende Zeile filtert das Wort "Alice" aus der letzten Zeile heraus und schreibt dieses in ein
drittes TXT :
@for /F "tokens=1,2,3,4,5 delims=\ " %%a in (<Kompletter Pfad der zweiten TXT>) do echo %%e >>c:\final.txt
Somit hast du ein Textfile final.txt mit dem gesuchten Wort als Inhalt (nicht getestet).
Wie man den Inhalt eines TXTs direkt in eine Variable schreibt, weiss ich leider nicht genau, ich hoffe aber, dass dir damit zumindest ein bisschen geholfen ist.
Hallo Franky-Boy und willkommen im Forum!
Du kannst zwar auch mit der Länge arbeiten (dann: %patch:~40%), allerdings geht's auch etwas allgemeiner, indem einfach der "Suchstring" entfernt (= durch "nichts" ersetzt) wird:
Wenn mehrere Zeilen den "Suchstring" enthalten, wird der Wert für "Ergebnis" aus der letzten passenden Zeile entnommen.
Den Klimmzug mit dem TempString musst Du unternehmen, weil für die Laufvariable %%i die String-Ersetzung nicht vorgenommen werden kann. Um die "delayedexpansion" kommst Du nicht herum, wenn der Suchstring für das Ersetzen variabel sein soll.
Grüße
bastla
Du kannst zwar auch mit der Länge arbeiten (dann: %patch:~40%), allerdings geht's auch etwas allgemeiner, indem einfach der "Suchstring" entfernt (= durch "nichts" ersetzt) wird:
@echo off & setlocal enabledelayedexpansion
set "Datei=D:\Test.txt"
set "Suchstring=HKEY_CURRENT_USER\RemoteAccess\Profile\\"
for /f "delims=" %%i in ('findstr "%Suchstring%" "%Datei%"') do set "TempString=%%i" & set "Ergebnis=!TempString:%SuchString%=!
echo %Ergebnis%
Den Klimmzug mit dem TempString musst Du unternehmen, weil für die Laufvariable %%i die String-Ersetzung nicht vorgenommen werden kann. Um die "delayedexpansion" kommst Du nicht herum, wenn der Suchstring für das Ersetzen variabel sein soll.
Grüße
bastla
... Nachtrag/Alternative: Aufteilung der Zeile anhand der "\" als Trennzeichen:
Damit werden die ersten 3 durch "\" (oder auch "\\") getrennten Bestandteile übersprungen und der Rest der Zeile in %Ergebnis% gespeichert.
Grüße
bastla
@echo off & setlocal
set "Datei=Z:\Test.txt"
set "Suchstring=HKEY_CURRENT_USER\RemoteAccess\Profile\\"
set Ergebnis=
for /f "tokens=3* delims=\" %%i in ('findstr "%Suchstring%" "%Datei%"') do set Ergebnis=%%j
echo %Ergebnis%
Grüße
bastla

@Franky-Boy
Lies dir doch mal die ausführlichen Informationen zu SET durch.
In der Eingabeaufforderung eingeben:
HELP SET oder SET /?.
Diese Syntax funktioniert bei allen Konsolenbefehlen der CMD.
In meinem Beispiel werden von hinten 5 Zeichen abgezogen und eine Länge von 6 verwendet.
Leider ist das aber falsch, was ich da angegeben habe, denn
1. würde die Angabe "-5" reichen, und
2. sind es nicht 6, sondern nur 5 Zeichen.
Lies dir doch mal die ausführlichen Informationen zu SET durch.
In der Eingabeaufforderung eingeben:
HELP SET oder SET /?.
Diese Syntax funktioniert bei allen Konsolenbefehlen der CMD.
In meinem Beispiel werden von hinten 5 Zeichen abgezogen und eine Länge von 6 verwendet.
Leider ist das aber falsch, was ich da angegeben habe, denn
1. würde die Angabe "-5" reichen, und
2. sind es nicht 6, sondern nur 5 Zeichen.
Moin Franky-Boy,
so wie ich es einschätze war der vermeintlich banale Hinweis auf "SET /?" durchaus kein Abwiegeln oder als reflexartiges RTFM gemeint.
Und das Lesen der (von M$ seit DOS-Zeiten wirklich verbesserten) Hilfe zu den CMD-Befehlen ist nicht nur hilfreich für Anfänger.
Nimm es einfach als ernst gemeinte Lösungshilfe an.
Grüße
Biber
so wie ich es einschätze war der vermeintlich banale Hinweis auf "SET /?" durchaus kein Abwiegeln oder als reflexartiges RTFM gemeint.
Und das Lesen der (von M$ seit DOS-Zeiten wirklich verbesserten) Hilfe zu den CMD-Befehlen ist nicht nur hilfreich für Anfänger.
Nimm es einfach als ernst gemeinte Lösungshilfe an.
Grüße
Biber