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

In Datei zwischen A und C unbekannten String (mit Leerstellen) in Variable abspeichern per Batch

Frage Entwicklung Batch & Shell

Mitglied: Alme123

Alme123 (Level 1) - Jetzt verbinden

14.08.2012, aktualisiert 12:22 Uhr, 3642 Aufrufe, 21 Kommentare

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
Mitglied: bastla
14.08.2012, aktualisiert um 12:55 Uhr
Hallo Alme123!

Unter der Annahme, dass der gesuchte Teilstring sich nicht über mehrere Zeilen erstreckt:
01.
@echo off & setlocal 
02.
set "Ein=D:\DeineDatei.txt" 
03.
set "Nach=A" 
04.
set "Vor=C" 
05.
 
06.
set "G=%temp%\GetSubString.vbs" 
07.
>"%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 
08.
 
09.
for /f "delims=" %%i in ('findstr /rc:"%Nach%.*%Vor%" "%Ein%"') do set "Zeile=%%i" 
10.
if not defined Zeile echo Keine Daten gefunden! & goto :eof 
11.
for /f "delims=" %%i in ('cscript //nologo "%G%" "%Zeile%" "%Nach%" "%Vor%"') do set "Var=%%i" 
12.
echo "%Var%"
Grüße
bastla
Bitte warten ..
Mitglied: Darkprodukt
14.08.2012, aktualisiert um 13:08 Uhr
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.
01.
@echo off & setlocal enabledelayedexpansion 
02.
for /f "usebackq delims=C" %%i in ("Test.txt") do set "string=%%i" ^ 
03.
						  &set "string=!string:*A=!"
Grüße
Darkprodukt
Bitte warten ..
Mitglied: bastla
14.08.2012 um 13:06 Uhr
@Darkprodukt
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=!"
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
Bitte warten ..
Mitglied: Alme123
14.08.2012 um 13:08 Uhr
Hallo zusammen,

erstmal danke für die schnellen Antworten.

Bastla:
Dein 1. Beitrag ist FAST perfekt für mich.

Das Problem:
Es gibt mehrere solcher Strings in verschiedenen Zeilen.
Kann man es so machen, dass ALLE Strings ausgelesen werden in verschiedene Variabeln?

Darkprodukt:
Das funktioniert nicht so, wie ich es mir vorgestellt hatte.

Alme123
Bitte warten ..
Mitglied: Darkprodukt
14.08.2012, aktualisiert um 13:14 Uhr
@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.
01.
EF 14 C6 F8 A2 BC 93 F6 
02.
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
Bitte warten ..
Mitglied: Alme123
14.08.2012, aktualisiert um 13:19 Uhr
@Darkprodukt

Nein, es ist eine HTML Datei.
Mit dem Script sollen alle Strings (<p>String</p>) ausgelesen werden.

Beispiel der HTML Datei:

<p>Unbekannter String1</p>
<p>Unbekannter String2</p>
<p>Unbekannter String3</p>

Alme123
Bitte warten ..
Mitglied: Darkprodukt
14.08.2012, aktualisiert um 13:52 Uhr
Hallo,

Mal schauen was sich da machen lässt.
01.
@echo off & setlocal enabledelayedexpansion 
02.
type >temp.txt 
03.
type >Strings.txt 
04.
 
05.
for /f "usebackq delims=" %%i in ("Test.txt") do set "string=%%i" ^ 
06.
						 &set "string=!string:*A=!" ^ 
07.
                                                 &echo/!string!>>temp.txt 
08.
 
09.
set "Zeile=0" 
10.
:Scan 
11.
for /f "usebackq delims=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" %%i in ('more +!Zeile! Temp.txt') do ( 
12.
set "Ziffer=%%i" 
13.
if !Ziffer!==C set "schalter=1" 
14.
if not defined schalter set "Var=!Var!!Ziffer!" 
15.
if defined schalter ( 
16.
                     echo/!Var!>>Strings.txt 
17.
                     set /a "Zeile=!Zeile!+1" 
18.
                     goto Scan 
19.
20.
21.
 
22.
del temp.txt
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
Bitte warten ..
Mitglied: Alme123
14.08.2012 um 13:32 Uhr
@Darkprodukt

Sytnaxfehler ;(
Bitte warten ..
Mitglied: Darkprodukt
14.08.2012, aktualisiert um 13:40 Uhr
@Alme123
Ja 2 Syntaxfehler am Anfang ist Normal das kommt vom erstellen der beiden dateien "type >Datei.txt"

Grüße
Darkprodukt
Bitte warten ..
Mitglied: Alme123
14.08.2012 um 13:40 Uhr
@Darkprodukt
Geht nicht (Windows 7)
Bitte warten ..
Mitglied: Darkprodukt
14.08.2012 um 13:42 Uhr
@Alme123

Geht schon.
Die Datei wird erstellt. Leider wird trotzdem Syntaxfehler ausgegeben.
Hab auch Windows 7

Grüße
Darkprodukt
Bitte warten ..
Mitglied: Alme123
14.08.2012 um 13:54 Uhr
Hallo zusammen,

bastla´s script funktioniert einwandfrei.
Danke an beide!

Alme123

[Theard closed]
Bitte warten ..
Mitglied: bastla
14.08.2012 um 14:44 Uhr
@Darkprodukt
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
Grüße
bastla
Bitte warten ..
Mitglied: Alme123
14.08.2012, aktualisiert um 18:24 Uhr
@Alle

Es funktioniert doch nicht so, wie es soll.
Also:
Aus einer HTML Datei sollen ALLE Strings zwischen <p> und </p> ausgelesen und in einer VARIABLE abgespeichert werden.

Beispiel einer HTML Datei:

<html>
<head>
<p>Blabla</p>
<p>BloBlo</p>
</html>

Danke im Vorraus.

Alme123

[Theard unclosed]
Bitte warten ..
Mitglied: bastla
14.08.2012 um 18:20 Uhr
Hallo Alme123!

Wozu verschiedene Variablen?

Wenn Du von Anfang an erklärt hättest, was Du eigentlich willst, wären wir schon ein Stück weiter ...

Grüße
bastla
Bitte warten ..
Mitglied: Alme123
14.08.2012 um 18:24 Uhr
Hi bastla,

Ja, stuldigung.
Eine Variable wär doch besser...
Also:
Aus einer HTML Datei sollen ALLE Strings zwischen <p> und </p> ausgelesen und in einer VARIABLE abgespeichert werden.

So?

Alme123
Bitte warten ..
Mitglied: bastla
14.08.2012 um 18:26 Uhr
Hallo Alme123!
So?
Nein - am besten wird jeder einzelne String gleich verarbeitet - schematisch:
01.
@echo off & setlocal 
02.
set "Ein=D:\DeineDatei.html" 
03.
set "Nach=<p>" 
04.
set "Vor=</p>" 
05.
 
06.
set "G=%temp%\GetSubString.vbs" 
07.
>"%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 
08.
 
09.
for /f "delims=" %%i in ('cscript //nologo "%G%" "%Ein%" "%Nach%" "%Vor%"') do ( 
10.
    echo Verarbeite "%%i" 
11.
)
Grüße
bastla
Bitte warten ..
Mitglied: Alme123
14.08.2012 um 18:45 Uhr
Hi bastla,

FAST genaus so,
Ein Problem noch:

Wenn die HTML Datei etwas so aussieht:

<p>
Bla
Bla
</p>

Findet er nichts

Gibt es vlt. eine Lösung?

Danke

Alme123
Bitte warten ..
Mitglied: bastla
14.08.2012, aktualisiert um 19:21 Uhr
Hallo Alme123!
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:
01.
@echo off & setlocal 
02.
set "Ein=D:\DeineDatei.html" 
03.
set "Nach=<p>" 
04.
set "Vor=</p>" 
05.
 
06.
set "G=%temp%\GetSubString.vbs" 
07.
 >"%G%" echo Set a=WScript.Arguments:Set rE=New RegExp:rE.Global=True:rE.Pattern=a(1)^&"(.+)"^&a(2) 
08.
>>"%G%" echo T=CreateObject("Scripting.FileSystemObject").OpenTextFile(a(0)).ReadAll:T=Replace(T,vbNewLine,""):T=Replace(T,a(2),a(2)^&vbNewLine) 
09.
>>"%G%" echo For Each M In rE.Execute(T):WScript.Echo M.SubMatches(0):Next 
10.
 
11.
for /f "delims=" %%i in ('cscript //nologo "%G%" "%Ein%" "%Nach%" "%Vor%"') do ( 
12.
    echo Verarbeite "%%i" 
13.
)
[/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: Alme123
14.08.2012 um 20:32 Uhr
Hi bastla,

Danke das funktioniert sehr gut.

Eine Frage noch (schon wieder? xD):
Wie kann ich es machen, dass alle %%i in %allezeilen% geschrieben wird?
Wenn ich
set allezeilen=%%i
eingebe
kommt der letzte String raus.

Danke.

Alme123
Bitte warten ..
Mitglied: bastla
14.08.2012 um 21:24 Uhr
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:
01.
@echo off & setlocal 
02.
set "Ein=D:\DeineDatei.html" 
03.
set "Nach=<p>" 
04.
set "Vor=</p>" 
05.
 
06.
set "G=%temp%\GetSubString.vbs" 
07.
 >"%G%" echo Set a=WScript.Arguments:Set rE=New RegExp:rE.Global=True:rE.Pattern=a(1)^&"(.+)"^&a(2) 
08.
>>"%G%" echo T=CreateObject("Scripting.FileSystemObject").OpenTextFile(a(0)).ReadAll:T=Replace(T,vbNewLine,""):T=Replace(T,a(2),a(2)^&vbNewLine) 
09.
>>"%G%" echo For Each M In rE.Execute(T):E=E^&M.SubMatches(0):Next:WScript.Echo E 
10.
 
11.
for /f "delims=" %%i in ('cscript //nologo "%G%" "%Ein%" "%Nach%" "%Vor%"') do set "allzeilen=%%i"
Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...