Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: Alme123

Alme123 (Level 1) - Jetzt verbinden

14.08.2012, aktualisiert 12:22 Uhr, 3707 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 ..
Ähnliche Inhalte
Batch & Shell

Batch - Random Zahl in Variable und Textdatei abspeichern

gelöst Frage von citroendsvierBatch & Shell8 Kommentare

Ich sitze an einer batch, die u.a. folgende Schritte abarbeiten soll: 1.: Namen einer anderen Batch aus einer Textdatei ...

Batch & Shell

Mit Batch nach einem String in allen bat Dateien auf C suchen und die gefundenen evtl. löschen

gelöst Frage von xxxxxxxBatch & Shell8 Kommentare

Hallo liebe Forummitglieder, Ich habe schon viele nützliche Beiträge bei Ihnen gefunden und bin daher sehr begeistert von Ihren ...

C und C++

C++ String in Funktion

gelöst Frage von coolkaiserABCC und C++6 Kommentare

Hallo Ich würde gern eine Funktion schreiben die mir einen string "wert" setzt. So hab ich es geschrieben (sieh ...

Batch & Shell

Teil eines Strings als Variable setzen

gelöst Frage von tHe-jAyBatch & Shell2 Kommentare

Hallo, für ein kleines Batch-Script benötige ich einen Servicenamen als Variable. Den Servicenamen frage ich über folgenden Befehl ab: ...

Neue Wissensbeiträge
Humor (lol)
IoT-Gefahr: Smartes Aquarium leckt!
Information von Lochkartenstanzer vor 12 StundenHumor (lol)3 Kommentare

Moin, Die IoT-Manie hat weitere Opfer gefunden. Ein Casino-Leck durch ein smartes Aquarium: Allerdings haben sie kein Wasser, sondern ...

Router & Routing

Alte Fritzbox 7270 mit VPN und SIP-Telefonie hinter O2 Homebox 6641 als "Modem"

Erfahrungsbericht von the-buccaneer vor 20 StundenRouter & Routing3 Kommentare

Nun war es soweit: Auch O2 hat mich mit VOIP zwangsbeglückt. Heute am Privatanschluss, in 2 Wochen ist das ...

Sicherheit

Ungepatchte Remote Code Execution-Lücke in LG NAS

Information von kgborn vor 1 TagSicherheit

Nutzt wer LG NAS-Einheiten? In den NAS-Einheiten der LG Network Storage-Einheiten gibt es eine sehr unschöne Schwachstelle, die einen ...

Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 1 TagWindows Update2 Kommentare

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Heiß diskutierte Inhalte
Sicherheit
Verbindliche Zustellung per E-Mail?
Frage von ahussainSicherheit17 Kommentare

Hallo allerseits, ein Kunde von mir nutzt intensiv Fax. Hauptgrund: zusammen mit einer Empfangsbestätigung ist eine verbindliche Zustellung gewährleistet. ...

Sonstige Systeme
Wie Normenkataloge im Unternehmen bereit stellen?
Frage von MuzzepuckelSonstige Systeme14 Kommentare

Hallo Kollegen, ich lese schon lange hier mit, nun mein ersrer Beitrag, bzw. Frage. :-) Wir benötigen für unsere ...

SAN, NAS, DAS
Entscheidung SAN Dell oder HP
Frage von VincorSAN, NAS, DAS13 Kommentare

Hallo, wir wollen uns für unsere Hyper V Umgebung eine neue SAN Anschaffen. Es laufen 30 VM's darunter, DC; ...

Windows Installation
Kleines Büro - wie PCs einrichten? Domaincontroller sinnvoll?
Frage von Jonas42Windows Installation13 Kommentare

Hallo zusammen, ich überlege derzeit mal wieder, ob ich unsere IT ändern sollte. Es handelt sich um ein Ingenieurbüro ...