In Datei zwischen A und C unbekannten String (mit Leerstellen) in Variable abspeichern per Batch
Hallo zusammen.
Ich suche nach längerer Zeit nach einem Batchscript (VBS ist auch OK) dass aus einer Datei
zwischen "A" und "C" einen unbekannten String mit Leerstellen in Variable abspeichert.
BeispielDateiinhalt:
AB BC
Ich möchte "B B" in der Variable stehen haben, was noch nicht funktioniert hat.
Weiß vlt. einer eine Lösung?
Danke im Vorraus.
Alme123
Ich suche nach längerer Zeit nach einem Batchscript (VBS ist auch OK) dass aus einer Datei
zwischen "A" und "C" einen unbekannten String mit Leerstellen in Variable abspeichert.
BeispielDateiinhalt:
AB BC
Ich möchte "B B" in der Variable stehen haben, was noch nicht funktioniert hat.
Weiß vlt. einer eine Lösung?
Danke im Vorraus.
Alme123
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 189580
Url: https://administrator.de/forum/in-datei-zwischen-a-und-c-unbekannten-string-mit-leerstellen-in-variable-abspeichern-per-batch-189580.html
Ausgedruckt am: 25.12.2024 um 01:12 Uhr
21 Kommentare
Neuester Kommentar
Hallo Alme123!
Unter der Annahme, dass der gesuchte Teilstring sich nicht über mehrere Zeilen erstreckt:
Grüße
bastla
Unter der Annahme, dass der gesuchte Teilstring sich nicht über mehrere Zeilen erstreckt:
@echo off & setlocal
set "Ein=D:\DeineDatei.txt"
set "Nach=A"
set "Vor=C"
set "G=%temp%\GetSubString.vbs"
>"%G%" echo Set a=WScript.Arguments:Set rE=New RegExp:rE.Pattern=a(1)^&"(.+)"^&a(2):For Each M In rE.Execute(a(0)):WScript.Echo M.SubMatches(0):Next
for /f "delims=" %%i in ('findstr /rc:"%Nach%.*%Vor%" "%Ein%"') do set "Zeile=%%i"
if not defined Zeile echo Keine Daten gefunden! & goto :eof
for /f "delims=" %%i in ('cscript //nologo "%G%" "%Zeile%" "%Nach%" "%Vor%"') do set "Var=%%i"
echo "%Var%"
bastla
Hallo,
Es gibt aber bei "AA BC" oder "AB CC" probleme.
Im ersten und zweiten fall ist die Ausgabe nur noch "B"
Fals das aber nie der fall ist solte es so gehen.
Grüße
Darkprodukt
Es gibt aber bei "AA BC" oder "AB CC" probleme.
Im ersten und zweiten fall ist die Ausgabe nur noch "B"
Fals das aber nie der fall ist solte es so gehen.
@echo off & setlocal enabledelayedexpansion
for /f "usebackq delims=C" %%i in ("Test.txt") do set "string=%%i" ^
&set "string=!string:*A=!"
Grüße
Darkprodukt
@Darkprodukt
Wozu die zweizeilige Schreibweise? Eigentlich sollte es doch
auch tun ...
Einschränkung bei Deinem Vorschlag: "C" darf nicht schon vor dem gesuchten Teilstring enthalten sein und muss aus einem einzelnen Zeichen bestehen ...
Grüße
bastla
Wozu die zweizeilige Schreibweise? Eigentlich sollte es doch
for /f "usebackq delims=C" %%i in ("Test.txt") do set "string=%%i" & set "string=!string:A=!"
Einschränkung bei Deinem Vorschlag: "C" darf nicht schon vor dem gesuchten Teilstring enthalten sein und muss aus einem einzelnen Zeichen bestehen ...
Grüße
bastla
@bastla
Ja der einzeiler tuts auch.
Über den Nachteil bin ich mir Bewust, aber wenn ers anders gewölt hätte.
Hätte er ja auch als Beispiel, was anderes angeben können.
Wie z.b.
Edit: Achja wenn ichs mir recht überlege geh ich davon aus das es sich um eine Hexadezimal geschriebene Datei Handelt, oder?
Grüße
Darkprodukt
Ja der einzeiler tuts auch.
Über den Nachteil bin ich mir Bewust, aber wenn ers anders gewölt hätte.
Hätte er ja auch als Beispiel, was anderes angeben können.
Wie z.b.
EF 14 C6 F8 A2 BC 93 F6
AF 8C 72 43 E9 8B C7 A2
Edit: Achja wenn ichs mir recht überlege geh ich davon aus das es sich um eine Hexadezimal geschriebene Datei Handelt, oder?
Grüße
Darkprodukt
Hallo,
Mal schauen was sich da machen lässt.
Noch ungetestet
Die ganzen Strings werden jezt in eine datei geschrieben und nicht in eine Variable, da man sonst Arrys breuchte.
[Edit]: Ergenzung
Grüße
Darkprodukt
Mal schauen was sich da machen lässt.
@echo off & setlocal enabledelayedexpansion
type >temp.txt
type >Strings.txt
for /f "usebackq delims=" %%i in ("Test.txt") do set "string=%%i" ^
&set "string=!string:*A=!" ^
&echo/!string!>>temp.txt
set "Zeile=0"
:Scan
for /f "usebackq delims=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" %%i in ('more +!Zeile! Temp.txt') do (
set "Ziffer=%%i"
if !Ziffer!==C set "schalter=1"
if not defined schalter set "Var=!Var!!Ziffer!"
if defined schalter (
echo/!Var!>>Strings.txt
set /a "Zeile=!Zeile!+1"
goto Scan
)
)
del temp.txt
Die ganzen Strings werden jezt in eine datei geschrieben und nicht in eine Variable, da man sonst Arrys breuchte.
[Edit]: Ergenzung
Grüße
Darkprodukt
@Alme123
Ja 2 Syntaxfehler am Anfang ist Normal das kommt vom erstellen der beiden dateien "type >Datei.txt"
Grüße
Darkprodukt
Ja 2 Syntaxfehler am Anfang ist Normal das kommt vom erstellen der beiden dateien "type >Datei.txt"
Grüße
Darkprodukt
@Alme123
Geht schon.
Die Datei wird erstellt. Leider wird trotzdem Syntaxfehler ausgegeben.
Hab auch Windows 7
Grüße
Darkprodukt
Geht schon.
Die Datei wird erstellt. Leider wird trotzdem Syntaxfehler ausgegeben.
Hab auch Windows 7
Grüße
Darkprodukt
@Darkprodukt
Grüße
bastla
Ja 2 Syntaxfehler am Anfang ist Normal das kommt vom erstellen der beiden dateien "type >Datei.txt"
Du könntest es aber auch einfach richtig machen :type nul>Datei.txt
bastla
Hallo Alme123!
Grüße
bastla
So?
Nein - am besten wird jeder einzelne String gleich verarbeitet - schematisch:@echo off & setlocal
set "Ein=D:\DeineDatei.html"
set "Nach=<p>"
set "Vor=</p>"
set "G=%temp%\GetSubString.vbs"
>"%G%" echo Set a=WScript.Arguments:Set rE=New RegExp:rE.Global=True:rE.Pattern=a(1)^&"(.+)"^&a(2):For Each M In rE.Execute(CreateObject("Scripting.FileSystemObject").OpenTextFile(a(0)).ReadAll):WScript.Echo M.SubMatches(0):Next
for /f "delims=" %%i in ('cscript //nologo "%G%" "%Ein%" "%Nach%" "%Vor%"') do (
echo Verarbeite "%%i"
)
bastla
Hallo Alme123!
[Edit] ... was sich vermeiden ließe, wenn vorweg die Zeilenumbrüche entfernt würden - etwa:
[/Edit]
Grüße
bastla
Gibt es vlt. eine Lösung?
Eventuell - aber die wird Dir in Batch nicht wirklich nützen, da Batch nur zeilenorientiert verarbeitet - die Zeilenumbrüche würden dann zu einem "Zerlegen" der Teilstrings führen ...[Edit] ... was sich vermeiden ließe, wenn vorweg die Zeilenumbrüche entfernt würden - etwa:
@echo off & setlocal
set "Ein=D:\DeineDatei.html"
set "Nach=<p>"
set "Vor=</p>"
set "G=%temp%\GetSubString.vbs"
>"%G%" echo Set a=WScript.Arguments:Set rE=New RegExp:rE.Global=True:rE.Pattern=a(1)^&"(.+)"^&a(2)
>>"%G%" echo T=CreateObject("Scripting.FileSystemObject").OpenTextFile(a(0)).ReadAll:T=Replace(T,vbNewLine,""):T=Replace(T,a(2),a(2)^&vbNewLine)
>>"%G%" echo For Each M In rE.Execute(T):WScript.Echo M.SubMatches(0):Next
for /f "delims=" %%i in ('cscript //nologo "%G%" "%Ein%" "%Nach%" "%Vor%"') do (
echo Verarbeite "%%i"
)
Grüße
bastla
Hallo Alme123!
Wenn die einzelnen Werte (ohne Trennzeichen, ein solches hast Du ja nicht genannt, und natürlich ohne Zeilenumbrüche - siehe oben) in die Variable "%allezeilen%" sollen (wozu auch immer), dann würde ich einfach das VBScript entsprechend anpassen:
Grüße
bastla
Wenn die einzelnen Werte (ohne Trennzeichen, ein solches hast Du ja nicht genannt, und natürlich ohne Zeilenumbrüche - siehe oben) in die Variable "%allezeilen%" sollen (wozu auch immer), dann würde ich einfach das VBScript entsprechend anpassen:
@echo off & setlocal
set "Ein=D:\DeineDatei.html"
set "Nach=<p>"
set "Vor=</p>"
set "G=%temp%\GetSubString.vbs"
>"%G%" echo Set a=WScript.Arguments:Set rE=New RegExp:rE.Global=True:rE.Pattern=a(1)^&"(.+)"^&a(2)
>>"%G%" echo T=CreateObject("Scripting.FileSystemObject").OpenTextFile(a(0)).ReadAll:T=Replace(T,vbNewLine,""):T=Replace(T,a(2),a(2)^&vbNewLine)
>>"%G%" echo For Each M In rE.Execute(T):E=E^&M.SubMatches(0):Next:WScript.Echo E
for /f "delims=" %%i in ('cscript //nologo "%G%" "%Ein%" "%Nach%" "%Vor%"') do set "allzeilen=%%i"
bastla