Batch String suchen in einer Textdatei und wenn gefunden diesen String + die nächsten 7 Zeichen in eine Variable speichern
Hallo und erfolgreiches neues Jahr an Alle hier,
Würde gerne per Batch aus eine Text-Datei einen String finden und dann die nächsten 7 Zeichen wissen wollen.
Hintergrund:
die Mozilla Firefox Datei prefs.js kopiere ich nach C:\ benenne um in prefs.txt
Da sind bestimmt viele Zeichen drinn, die so einfach nicht angefasst werden wollen.
jedenfalls kann ich mir mit
for /f "tokens=2 delims=/" %%a in ('findstr "Path" "%APPDATA%\Mozilla\Firefox\profiles.ini"') do set mozPfad=%APPDATA%\Mozilla\Firefox\profiles\%%a
echo %mozPfad%
findstr cld.bz/....... "%mozPfad%\prefs.js" >C:\prefsZeile.txt
schon mal die Zeile mit den Webseiten, die beim Start von Firefox in eine Datei prefsZeile.txt ausgeben lassen.
Das ist dann der Inhalt, eine superlange Zeile:
user_pref("browser.startup.homepage", "https://www.google.de/search?q=Google&ie=utf-8&oe=utf-8&client=firefox-b&gfe_rd=cr&ei=ZXtaWKODDsXc8AeS1oOoCg|http://autec-wheels.de:8080/webshop/login.action|https://www.bannerbatterien.com/de/Batteriesuche|https://c11.aufwind-solutions.de/window.phtml?e_pid=multipart|https://workshop.autodata-group.com/login?destination=vehicle/component/ ...|http://teileshop-berlin.dinnebiergruppe.de/Account/Login?ReturnUrl=%2F# ...|https://www.nuernberger-garanta.de/versicherungen/mobilitaetsgarantie/in ...|https://www.kupplung.de/anhaengerkupplung/anhaengerkupplungen/?cnid=527b ..)|https://cld.bz/EZHGout/150/|https://www.repdoc.com/WM/Login#Articles|https://www.partslink24.com/partslink24/user/login.do?redirectUrl=/parts ...|https://login.i.daimler.com/internet/login?brand=wp&TYPE=33554432&am ...$SM$1K5vbIO6Q9st1ZNW2wlDfunuGQNTOnjkxYu2KY8tkWi51IxOIl7gag2jXqDZV1MaPzaiXHHFR2xsjmHR2NqW3SxKQNhucPt%2b&TARGET=$SM$https%3a%2f%2faftersales%2ei%2edaimler%2ecom%2fmb-webparts%2f|https://www.tyre24.com/de/de/item/details/id/T279647//alcar//carManufact ...|https://www.kfz-betrieb.vogel.de/reifenfinder/|http://1055spreeradio.radio.de/|https://www.ks-partnersystem.de/;
jetzt suche ich nach dem cld.bz/ und wuerde gerne die naechsten 7 Zeichen wissen
um an einem anderen Arbeitsplatz dann diese neuen 7 Yeichen zu ersetzen.
sonst kann ich das nicht vollautomatisch machen,
dass diese 7 Zeichen spaeter ersetzt werden das funktioniert schon,
bisher muss ich diese 7 Zeichen selber in eine Textdatei eingeben.
Hatte gedacht, das bring ich schon hin, aber die anyahl der Tokens, wenn man die hier ueberhaupt bestimmen kann, muessen ja nicht gleich bleiben, wenn der Chef mal die Reihenfolge der Firefox/Start/Seiten vorne aendert.
Ja, ich koennts ueberleben, aber interessant waehre es schon.
Danke, wenns einer liest schonmal
Würde gerne per Batch aus eine Text-Datei einen String finden und dann die nächsten 7 Zeichen wissen wollen.
Hintergrund:
die Mozilla Firefox Datei prefs.js kopiere ich nach C:\ benenne um in prefs.txt
Da sind bestimmt viele Zeichen drinn, die so einfach nicht angefasst werden wollen.
jedenfalls kann ich mir mit
for /f "tokens=2 delims=/" %%a in ('findstr "Path" "%APPDATA%\Mozilla\Firefox\profiles.ini"') do set mozPfad=%APPDATA%\Mozilla\Firefox\profiles\%%a
echo %mozPfad%
findstr cld.bz/....... "%mozPfad%\prefs.js" >C:\prefsZeile.txt
schon mal die Zeile mit den Webseiten, die beim Start von Firefox in eine Datei prefsZeile.txt ausgeben lassen.
Das ist dann der Inhalt, eine superlange Zeile:
user_pref("browser.startup.homepage", "https://www.google.de/search?q=Google&ie=utf-8&oe=utf-8&client=firefox-b&gfe_rd=cr&ei=ZXtaWKODDsXc8AeS1oOoCg|http://autec-wheels.de:8080/webshop/login.action|https://www.bannerbatterien.com/de/Batteriesuche|https://c11.aufwind-solutions.de/window.phtml?e_pid=multipart|https://workshop.autodata-group.com/login?destination=vehicle/component/ ...|http://teileshop-berlin.dinnebiergruppe.de/Account/Login?ReturnUrl=%2F# ...|https://www.nuernberger-garanta.de/versicherungen/mobilitaetsgarantie/in ...|https://www.kupplung.de/anhaengerkupplung/anhaengerkupplungen/?cnid=527b ..)|https://cld.bz/EZHGout/150/|https://www.repdoc.com/WM/Login#Articles|https://www.partslink24.com/partslink24/user/login.do?redirectUrl=/parts ...|https://login.i.daimler.com/internet/login?brand=wp&TYPE=33554432&am ...$SM$1K5vbIO6Q9st1ZNW2wlDfunuGQNTOnjkxYu2KY8tkWi51IxOIl7gag2jXqDZV1MaPzaiXHHFR2xsjmHR2NqW3SxKQNhucPt%2b&TARGET=$SM$https%3a%2f%2faftersales%2ei%2edaimler%2ecom%2fmb-webparts%2f|https://www.tyre24.com/de/de/item/details/id/T279647//alcar//carManufact ...|https://www.kfz-betrieb.vogel.de/reifenfinder/|http://1055spreeradio.radio.de/|https://www.ks-partnersystem.de/;
jetzt suche ich nach dem cld.bz/ und wuerde gerne die naechsten 7 Zeichen wissen
um an einem anderen Arbeitsplatz dann diese neuen 7 Yeichen zu ersetzen.
sonst kann ich das nicht vollautomatisch machen,
dass diese 7 Zeichen spaeter ersetzt werden das funktioniert schon,
bisher muss ich diese 7 Zeichen selber in eine Textdatei eingeben.
Hatte gedacht, das bring ich schon hin, aber die anyahl der Tokens, wenn man die hier ueberhaupt bestimmen kann, muessen ja nicht gleich bleiben, wenn der Chef mal die Reihenfolge der Firefox/Start/Seiten vorne aendert.
Ja, ich koennts ueberleben, aber interessant waehre es schon.
Danke, wenns einer liest schonmal
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 360160
Url: https://administrator.de/contentid/360160
Ausgedruckt am: 19.11.2024 um 17:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo Crocodyl,
Dir auch ein frohes Neues.
Schicker wäre diese Zeile:
Ich kann Dir nur eine Lösung anbieten.
Ich mache sowas mit pedate.
Das spuckt
Damit wäre die Aufgabe gelöst oder soll der Wert weiter verarbeitet oder woanders eingebaut werden?
Die Schritte im Einzelnen kurz erklärt:
/fin - öffen die Textdatei, ließ die erste Zeile und speichert deren Inhalt in ~line
/str - Mach eine Stringoperation und zwar suche die 1. Position von cld.bz in ~line
/m=pos - Speicher den Positionswert in m=pos
/if - Mach einen numerischen Vergleich: ~m=pos kleiner 0
Falls ja:
- dann /next (gehe zurück zu /fin und lies die nächste Zeile in ~line ein
Falls Nein:
- /calc (addiere ~m=pos mit 7) (7 ist die Länge von "cld.bz/")
- Speicher das Ergebnis wieder in m=pos
- /str~ - Nehe den Teilstring aus ~line ab der Position ~m=pos und zwar 7 Zeichen
Es folgt keine weitere Anweisung, daher erfolgt die Ausgabe, was hier der Teilstring ist, also
Gruß Frank
Dir auch ein frohes Neues.
Schicker wäre diese Zeile:
user_pref("browser.startup.homepage", "about:blank");
Zitat von @Crocodyl:
Würde gerne per Batch aus eine Text-Datei einen String finden und dann die nächsten 7 Zeichen wissen wollen.
Die Batch- und PS-Experten könnten Dir sicher Deine Frage beantworten.Würde gerne per Batch aus eine Text-Datei einen String finden und dann die nächsten 7 Zeichen wissen wollen.
Ich kann Dir nur eine Lösung anbieten.
Ich mache sowas mit pedate.
pedate /fin C:\prefs.txt /str~ pos ~line cld.bz/ 1 /m=pos /if "number ~m=pos lss 0" /next : /calc "~m=pos + 7" /m=pos /str~ subl ~line ~m=pos 7 :
EZHGout
aus.Damit wäre die Aufgabe gelöst oder soll der Wert weiter verarbeitet oder woanders eingebaut werden?
Die Schritte im Einzelnen kurz erklärt:
/fin - öffen die Textdatei, ließ die erste Zeile und speichert deren Inhalt in ~line
/str - Mach eine Stringoperation und zwar suche die 1. Position von cld.bz in ~line
/m=pos - Speicher den Positionswert in m=pos
/if - Mach einen numerischen Vergleich: ~m=pos kleiner 0
Falls ja:
- dann /next (gehe zurück zu /fin und lies die nächste Zeile in ~line ein
Falls Nein:
- /calc (addiere ~m=pos mit 7) (7 ist die Länge von "cld.bz/")
- Speicher das Ergebnis wieder in m=pos
- /str~ - Nehe den Teilstring aus ~line ab der Position ~m=pos und zwar 7 Zeichen
Es folgt keine weitere Anweisung, daher erfolgt die Ausgabe, was hier der Teilstring ist, also
EZHGout
Gruß Frank
So etwas macht man (wegen fehlender Regex Unterstützung) nicht mit Batch. Wenns aber unbedingt sein muss, dann vielleicht so:
Steffen
@echo off &setlocal
for /f "tokens=2 delims=/" %%a in ('findstr "Path" "%APPDATA%\Mozilla\Firefox\profiles.ini"') do set "mozPfad=%APPDATA%\Mozilla\Firefox\profiles\%%a"
for /f "delims=" %%i in ('findstr /c:"https://cld.bz/" "%mozPfad%\prefs.js"') do set "prefsZeile=%%i"
setlocal EnableDelayedExpansion
set "prefsZeile=!prefsZeile:"=^"!"
set "prefsZeile=!prefsZeile:&=^&!"
set "prefsZeile=!prefsZeile:|=^|!"
set "i=0"
set "sub[!i!]=%prefsZeile:https://cld.bz/=" & set /A i+=1 & set "sub[!i!]=%"
set "sub=!sub[1]:~,7!"
endlocal &set "sub=%sub%"
echo %sub%
pause
gci "$env:APPDATA\Mozilla\Firefox\profiles\*\prefs.js" |?{(gc $_.Fullname) -match 'cld\.bz/([^/]+)'} | %{$matches[1]}
Hallo Crocodyl,
Deinen Betrag habe ich heute etwas aufmerksamer gelesen und dabei fiel mir auf, dass Du die Aufgabenstellung an unterschiedlichen Stellen unterschiedlich formuliert hast:
a) Im Beitragstext heißt es:
b) Im Beitragstitel heißt es:
Zunächst hatte ich nur die Aufgabenstellung im Beitragstext gesehen und beachtet, also die 7 Zeichen nach dem Suchstring ermittelt.
Laut Beitragstitel suchst Du aber den String und zusätzlich die darauf folgenden 7 Zeichen.
Okay, der Unterschied ist nicht groß, aber vorhanden und sicher auch entscheidend.
Was gemäß dem Beitragstitel zusätzlich zur Aufgabenstellung gehört, ist das Ablegen des Suchergebnisses in einer Variablen.
Ich habe mein Skript jetzt so umgeschrieben, dass es alternativ beide Varianten ermöglicht und das Ergebnis (falls vorhanden) in der Variablen
Desweiteren habe ich noch geändert, dass zunächst die Zeile, die mit «
Im meiner ersten Version wurde der Suchstring irgendwo in der Datei gesucht, was durchaus falsche Treffer ermöglicht.
Dazu kommt die erwähnte Fallunterscheidung und etwas mehr an Grundgerüst.
Was möchtest Du mit diesen zerrissenen Sätzen sagen, insbesordere: was funktioniert schon?
Falls Du weiter Automatisieren möchtest, also das Suchergebnis in die prefs.js eines anderen Rechners automatisch einfügen lassen möchtest, ergeben sich dabei durchaus Schwiegigkeiten.
Das eigentliche Ersetzten könnte man leicht mit pedate erledigen.
Ich wüsste aber nicht, wie man beim Zugriff auf einen anderen Rechner über's Netzwerk (
Man könnte aber beispielsweise die Aufgabe zweiteilen und getrennt auf Quell- und Ziel-Rechner das gewünschte Skript ausführen:
- Ein erstes Skript liest den Wert aus der lokalen prefs.js und legt ihn in einer Datei im Netzwerk ab.
- Ein zweites Skript liest den Wert aus der Datei im Netzwerk und aktualisiert damit die lokale prefs.js entsprechend.
Gruß Frank
Deinen Betrag habe ich heute etwas aufmerksamer gelesen und dabei fiel mir auf, dass Du die Aufgabenstellung an unterschiedlichen Stellen unterschiedlich formuliert hast:
a) Im Beitragstext heißt es:
Zitat von @Crocodyl:
Würde gerne per Batch aus eine Text-Datei einen String finden und dann die nächsten 7 Zeichen wissen wollen.
Würde gerne per Batch aus eine Text-Datei einen String finden und dann die nächsten 7 Zeichen wissen wollen.
b) Im Beitragstitel heißt es:
Zitat von @Crocodyl:
String suchen in einer Textdatei und wenn gefunden diesen String + die nächsten 7 Zeichen in eine Variable speichern
String suchen in einer Textdatei und wenn gefunden diesen String + die nächsten 7 Zeichen in eine Variable speichern
Zunächst hatte ich nur die Aufgabenstellung im Beitragstext gesehen und beachtet, also die 7 Zeichen nach dem Suchstring ermittelt.
Laut Beitragstitel suchst Du aber den String und zusätzlich die darauf folgenden 7 Zeichen.
Okay, der Unterschied ist nicht groß, aber vorhanden und sicher auch entscheidend.
Was gemäß dem Beitragstitel zusätzlich zur Aufgabenstellung gehört, ist das Ablegen des Suchergebnisses in einer Variablen.
Ich habe mein Skript jetzt so umgeschrieben, dass es alternativ beide Varianten ermöglicht und das Ergebnis (falls vorhanden) in der Variablen
%DieZeichen%
speichert.Desweiteren habe ich noch geändert, dass zunächst die Zeile, die mit «
user_pref("browser.startup.homepage",
» beginnt gesucht wird und dann nur in dieser Zeile der eigentliche Suchstring gesucht wird.Im meiner ersten Version wurde der Suchstring irgendwo in der Datei gesucht, was durchaus falsche Treffer ermöglicht.
Dazu kommt die erwähnte Fallunterscheidung und etwas mehr an Grundgerüst.
@echo off
set suchstr=cld.bz/
set inklusive=nein
REM set inklusive=ja
set zeichenanzahl=7
set zeilenbeginn=user_pref(\"browser.startup.homepage\",
set suchdatei=prefs.js
echo Gesucht wird die Datei %suchdatei%
set PrefsPfad=
for /f %%f in ('dir /ad /b %APPDATA%\Mozilla\Firefox\Profiles') do set PrefsPfad=%APPDATA%\Mozilla\Firefox\Profiles\%%f
if "%PrefsPfad%"=="" (
echo Der Profilpfad konnte nicht ermittelt werden.
exit /b 1
)
if not exist "%PrefsPfad%"\ (
echo Eine %suchdatei% wurde nicht gefunden.
echo Gesucht wurde sie in %PrefsPfad%
exit /b 2
)
set za-output=
if "%inklusive%"=="ja" (
echo Gesucht werden "%suchstr%" und die darauf folgenden %zeichenanzahl% Zeichen
echo und zwar in der Zeile, die mit "%zeilenbeginn%" beginnt
echo in der Datei "%PrefsPfad%"\%suchdatei%
pedate /fin %PrefsPfad%\%suchdatei% /str~ pos ~line %zeilenbeginn% 1 /m=pos1 /if "number ~m=pos1 neq 0" /next : /str~ pos ~line %suchstr% 1 /m=pos2 /str len %suchstr% /m=len /calc "~m=len + %zeichenanzahl%" /m=len /str~ subl ~line ~m=pos2 ~m=len /m=erg : /if "number ~m=pos2 lss 0" /clear : ~m=erg : /v
) else (
echo Gesucht werden die %zeichenanzahl% Zeichen, die auf "%suchstr%" folgen
echo und zwar in der Zeile, die mit "%zeilenbeginn%" beginnt
echo in der Datei "%PrefsPfad%"\%suchdatei%
pedate /fin %PrefsPfad%\%suchdatei% /str~ pos ~line %zeilenbeginn% 1 /m=pos1 /if "number ~m=pos1 neq 0" /next : /str~ pos ~line %suchstr% 1 /m=pos2 /str len %suchstr% /m=len /calc "~m=pos2 + ~m=len" /m=pos3 /str~ subl ~line ~m=pos3 %zeichenanzahl% /m=erg : /if "number ~m=pos2 lss 0" /clear : ~m=erg : /v
)
call zavars.cmd
del zavars.cmd
echo(
if not defined za-output (
echo Die gesuchte Zeichenfolge konnte nicht gefunden oder ermittelt werden.
exit /b 3
)
set DieZeichen=%za-output%
echo Gefunden wurde: %DieZeichen%
Zitat von @Crocodyl:
...die Mozilla Firefox Datei prefs.js kopiere ich nach C:\ benenne um in prefs.txt
Da sind bestimmt viele Zeichen drinn, die so einfach nicht angefasst werden wollen.
Das Kopieren kannst Du Dir sparen, denn solange Du nur lesend auf die Datei zugreifst, musst Du Dir keine Sorgen machen, dass Du sie kaputt machst....die Mozilla Firefox Datei prefs.js kopiere ich nach C:\ benenne um in prefs.txt
Da sind bestimmt viele Zeichen drinn, die so einfach nicht angefasst werden wollen.
Zitat von @Crocodyl:
jetzt suche ich nach dem cld.bz/ und wuerde gerne die naechsten 7 Zeichen wissen
um an einem anderen Arbeitsplatz dann diese neuen 7 Yeichen zu ersetzen.
sonst kann ich das nicht vollautomatisch machen,
dass diese 7 Zeichen spaeter ersetzt werden das funktioniert schon,
bisher muss ich diese 7 Zeichen selber in eine Textdatei eingeben.
Hä?jetzt suche ich nach dem cld.bz/ und wuerde gerne die naechsten 7 Zeichen wissen
um an einem anderen Arbeitsplatz dann diese neuen 7 Yeichen zu ersetzen.
sonst kann ich das nicht vollautomatisch machen,
dass diese 7 Zeichen spaeter ersetzt werden das funktioniert schon,
bisher muss ich diese 7 Zeichen selber in eine Textdatei eingeben.
Was möchtest Du mit diesen zerrissenen Sätzen sagen, insbesordere: was funktioniert schon?
Falls Du weiter Automatisieren möchtest, also das Suchergebnis in die prefs.js eines anderen Rechners automatisch einfügen lassen möchtest, ergeben sich dabei durchaus Schwiegigkeiten.
Das eigentliche Ersetzten könnte man leicht mit pedate erledigen.
Ich wüsste aber nicht, wie man beim Zugriff auf einen anderen Rechner über's Netzwerk (
\\Rechner\C$
) den dort gültigen %APPDATA%-Pfad ermittelt, um die richtige prefs.js zu finden und möglicherweise würde es an den gegebenen Rechten scheitern, die "fremde" Datei von der Ferne aus zu ändern.Man könnte aber beispielsweise die Aufgabe zweiteilen und getrennt auf Quell- und Ziel-Rechner das gewünschte Skript ausführen:
- Ein erstes Skript liest den Wert aus der lokalen prefs.js und legt ihn in einer Datei im Netzwerk ab.
- Ein zweites Skript liest den Wert aus der Datei im Netzwerk und aktualisiert damit die lokale prefs.js entsprechend.
Gruß Frank
Hallo Crocodyl,
1. Beispiel:
username=Administrator
appdate=C:\Users\Administrator.000\AppData\Roaming
2. Beispiel:
username=Sabine.Leutheusser-Schnarrenberger
appdate=C:\Users\Sabine.Leutheusser\AppData\Roaming
Da es auch eine Batch war, hättest Du sie vermutlich per
Da es jetzt läuft, könntest Du den Beitrag auf "gelöst" setzen.
Gruß Frank
Zitat von @Crocodyl:
Supi, danke, ist bestimmt auch mal für andere sehr hilfreich, das Ding zu wissen.
Nur aus Neugier: Hast Du eine der drei hier angebotenen Lösungen genommen?Supi, danke, ist bestimmt auch mal für andere sehr hilfreich, das Ding zu wissen.
Zitat von @Crocodyl:
Bei den PC-Starts läuft die Batch je nach %username% ab,
dann haben die User am nächsten Morgen die erneuerte Webseite an genau der gleichen Tab-Stelle.
Sei Dir gewahr, dass der Name bei %USERNAME% und bei %APPDATA% nicht zwangsläufig identisch ist.Bei den PC-Starts läuft die Batch je nach %username% ab,
dann haben die User am nächsten Morgen die erneuerte Webseite an genau der gleichen Tab-Stelle.
1. Beispiel:
username=Administrator
appdate=C:\Users\Administrator.000\AppData\Roaming
2. Beispiel:
username=Sabine.Leutheusser-Schnarrenberger
appdate=C:\Users\Sabine.Leutheusser\AppData\Roaming
Zitat von @Crocodyl:
Das Ersetzen hab ich mit der zweiten im Web gefundenen Batch gemacht.
Die Erste konnte ich irgendwie nicht aus einer Batch heraus aufrufen, die ließ sich nur in der Konsole starten, hat aber ansonsten funktioniert.
Etwas, das sich nicht per Batch starten lässt gibt es eher nicht, vermutlich hast Du nur was falsch gemacht.Das Ersetzen hab ich mit der zweiten im Web gefundenen Batch gemacht.
Die Erste konnte ich irgendwie nicht aus einer Batch heraus aufrufen, die ließ sich nur in der Konsole starten, hat aber ansonsten funktioniert.
Da es auch eine Batch war, hättest Du sie vermutlich per
call replace.bat und noch Parameter
aufrufen müssen.Da es jetzt läuft, könntest Du den Beitrag auf "gelöst" setzen.
Gruß Frank