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

Textzeile aus Datei Kopieren und sortieren

Frage Entwicklung Batch & Shell

Mitglied: Pago159

Pago159 (Level 2) - Jetzt verbinden

17.05.2011, aktualisiert 18.10.2012, 4215 Aufrufe, 15 Kommentare

Hallo Kollegen,

ich bräuchte mal wieder eure Hilfe.

Folgende Ausgangssituation ist gegeben:

  • Testdokument.txt mit folgendem Inhalt:

Vorher:

01.
xyz 
02.
abcd 
03.
defg 
04.
****** wurde gelöscht 
05.
sgbnj 
06.
jklöp 
07.
****** wurde gelöscht
( sind Zahlenfolgen, welche immer sechsstellig sind.)

Nachher:
01.
****** wurde gelöscht 
02.
****** wurde gelöscht 
03.
****** wurde gelöscht
Benötigt:

  • Textdokument in dem nur die Gelöschten Dateien angegeben sind und nach Zahl aufsteigend sortiert.

Ich habe mir gedacht, dass das ganze per Batch machbar ist.

gedacht habe ich an:

findstr "
wurde gelöscht" %systemroot%\TestdokumentTEST.txt

Damit sollte doch eigentlich der String in das neue Textdokument Kopiert werden (Textdokument wird auf Batch gezogen)

Vielen Dank schonmal im vorraus
Grapper
Mitglied: bastla
17.05.2011 um 21:38 Uhr
Hallo Grapper!

Könntest Du das bitte mit einem "Vorher-Nachher"-Vergleich der Dateiinhalte (gerne auch mit "Code"-Formatierung) deutlicher darstellen? Derzeit kann ich Dir nicht (weit genug ) folgen ...

[Edit] Danke, jetzt geht's [/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: bastla
17.05.2011 um 21:47 Uhr
... etwa so:
findstr /c:"wurde gel" %1|sort>%systemroot%\TestdokumentTEST.txt
- unter der Annahme, dass in "%systemroot%\TestdokumentTEST.txt" das Ergebnis stehen soll (und etwas abgekürzt, um ev Codierungsproblemen hinsichtlich des Umlautes vorzubeugen) ...

Grüße
bastla
Bitte warten ..
Mitglied: Pago159
17.05.2011 um 22:01 Uhr
Danke, das hört sich schonmal gut an,
werde das morgen direkt mal teste,
habe gerade die Datei nicht vor mir.

Hast du vll auch noch eine gute Seite,
mit der ich mich in die Batch Programmierung einarbeiten kann?
Werde dies wohl jetzt doch öfter benötigen, als gedacht.

Lg GRapper
Bitte warten ..
Mitglied: ovu-p86
18.05.2011, aktualisiert 18.10.2012
Hallo GRapper,


mir gehts ähnlich. Versuch mich auch gerade ins Batchen einzuarbeiten.
Bin noch nicht so lange hier dabei, aber ne Menge gelernt, gerade auch von den
Kommentaren unserer Batch-Spezies ( immer eine Anregung zur Repertoirerweiterung).

Ich weiß nicht, ob es eine alles erschlagende Abhandlung zum Batchen gibt.
ich hab das jetzt so gemacht:

- Hab mir mit Cuecards ( http://www.mhst.net/cuecards2/ ) ne kl. Datenbank in Baumstruktur mit den
wichtigsten Befehlen angelegt, wo ich einfach das Ergebnis von "Befehl /?" drin habe,
ggf. mit ergänzenden Kommentaren.

- außerdem hat mir sehr geholfen die Hilfe zum für mich effizientesten Batch-Befehl "For"
http://www.administrator.de/Tutorial_zur_FOR-Schleife.html
sowie die Abhandlung zu Variablen
http://www.administrator.de/wissen/wie-arbeite-ich-mit-batch-umgebungsv ...

Für mich das schlimmste Kapitel sind die Leerzeichen in Pfaden, Dateinamen u.s.w., weil dann in den
Batches alles so unberechenbar wird.

- deshalb hab ich mir jetzt das Grundprinzip angewöhnt von Vornherein den Batch so anzulegen, daß
Leerzeichen erlaubt sind. Dann gewöhnt man sich dran und hat eine Fehlerquelle weniger. Zum Testen
baue ich deshalb immer gleich Verzeichnisse/Dateinamen etc. mit Leerzeichen. Dann ists auch
allgemeingültig.

Erstaunlich finde ich immer wieder was man so alles mit Batch/Cmd so machen kann.
Das sind meine bisherigen Erfahrungen. Dank nochmal an unsere Batch-Spezies.


Gruß

Uwe
Bitte warten ..
Mitglied: Pago159
18.05.2011 um 14:16 Uhr
@ Uwe:

Danke für die Links, werde mir das nachher mal schnell anschauen.

@ bastla:

Deine Zeile funktioniert super,
allerdings musste ich gerade feststellen, dass ich oben etwas Quatsch geschrieben habe:

01.
 
02.
kljbdakj asjdnkj ****** wurde gelöscht. dafds fsd 
03.
lakfopjkad ****** wurde gelöscht. 
04.
****** wurde gelöscht. sjah spdhfpuah  
05.
 
kann leider auch in dem Dokument vorkommen.
Dann wird ja die ganze Zeile rausgezogen.

Ich benötige allerdings nur die stelle :

" wurde gelöscht"
gibt es da vll auch eine lösung für?

Danke nochmal im vorraus.

Lg Grapper
Bitte warten ..
Mitglied: bastla
18.05.2011 um 14:21 Uhr
Hallo Grapper!

Riskier mal einen Blick in die Hilfe (findstr /?) - da stößt Du dann sicherlich auf zB "/e" ...

... oder was meinst Du mit der "Stelle"?

Grüße
bastla
Bitte warten ..
Mitglied: Pago159
18.05.2011 um 14:30 Uhr
Also bräuche ich um den String rauszubekommen /L
nur wird diese funktion auch die Zahl mitnehmen, da diese ja immer anders ist?
Dafür sind dann bestimmt die ...... da oder?

<EDIT>
Wenn ich allerdings die Platzhalter eintrage, dann wird der Text nicht mehr gefunden, bzw. das neue Textdokument bleibt leer.
Code ohne Plkatzhalter:

01.
@echo 
02.
findstr /c:"wurde gelöscht." %1|sort>h:\TestdokumentTEST.txt 
03.
Pause
Code mit Platzhalter:

01.
@echo 
02.
findstr /c:"...... wurde gelöscht." %1|sort>h:\TestdokumentTEST.txt 
03.
Pause
Alternativ habe ich es auch schon mit * versucht:

01.
@echo 
02.
findstr /c:"****** wurde gelöscht." %1|sort>h:\TestdokumentTEST.txt 
03.
Pause

</EDIT>
Lg GRapper
Bitte warten ..
Mitglied: bastla
18.05.2011 um 14:47 Uhr
Hallo Grapper!

Ich weiß auch dieses Mal nicht, was Du genau meinst - in
kljbdakj asjdnkj ****** wurde gelöscht. dafds fsd 
lakfopjkad ****** wurde gelöscht. 
****** wurde gelöscht. sjah spdhfpuah 
gibt es schon keine Zeile, die zu
++++++ wurde gelöscht
passt.

Dann schreibst Du zwar immer wieder von "Zahlen", es kommen in Deinen Beispielen aber keine vor, und was Du letztendlich tatsächlich als Ergebnis haben möchtest, kann ich Deinen Ausführungen ebenfalls nicht exakt entnehmen - wie wäre es daher einmal mit einem "richtigen" "Vorher - Nachher"-Beispiel - meinetwegen mit veränderten / anonymisierten Daten, aber zumindest mit erkennbaren Strukturen ...

Und gleich noch vorweg: "findstr" findet Zeilen - eine weitere Zerlegung müsste dann auf andere Weise erfolgen.

Grüße
bastla
Bitte warten ..
Mitglied: Pago159
18.05.2011 um 14:54 Uhr
Ok, ich dachte dass "findstr" wirklich eine Textstelle finden kann.

also nochmal ganz genau:

Der Text schaut folgendermaßen aus:

01.
Das medium 156156 wurde gelöscht. 
02.
mehrere läufe wurden verarbeitet, das meium 123123 wurde gelöscht
daraus wird der übersichthalber nur benötigt:
01.
123123 wurde gelöscht 
02.
156156 wurde gelöscht
deswegen habe ich das ganze mit den Platzhaltern versucht, welche ja auch in der Hilfe /? angegeben werden.

Lg GRapper
Bitte warten ..
Mitglied: bastla
18.05.2011 um 16:00 Uhr
Hallo Grapper!

Dann versuch das mal so:
01.
@echo off & setlocal 
02.
set "Aus=TestdokumentTEST.txt" 
03.
set "Such1=wurde" 
04.
set "Such2=gelöscht" 
05.
 
06.
del "%Aus%" 2>nul 
07.
for /f "delims=" %%i in ('findstr /c:"%Such1% %Such2%" %1') do call :ProcessLine %%i 
08.
sort "%Aus%" /o "%Aus%" 
09.
goto :eof 
10.
 
11.
:ProcessLine 
12.
set "Nr=" 
13.
set "Gef=" 
14.
:Loop 
15.
if "%1"=="" goto :eof 
16.
if %1==%Such1% ( 
17.
    set "Gef=true" 
18.
) else ( 
19.
    echo %1|findstr /c:%Such2%>nul && ( 
20.
        if defined Gef >>"%Aus%" echo %Nr% %Such1% %Such2% 
21.
        set Gef= 
22.
    ) || ( 
23.
        set "Nr=%1" 
24.
25.
26.
shift 
27.
goto :Loop
Damit sollten sogar mehrfach in einer Zeile vorhandene " wurde gelöscht" gefunden werden (wenn sie sauber durch Leerzeichen voneinander getrennt sind) ...

Grüße
bastla
Bitte warten ..
Mitglied: Pago159
18.05.2011 um 16:26 Uhr
Danke Bastla,
die Batch funktioniert super.

Sorry nochmal für meine Missverständliche ausdrucksweise.

Lg Grapper
Bitte warten ..
Mitglied: Pago159
20.05.2011 um 16:24 Uhr
Hey Batsla,

eine Frage Quält mich da dann doch noch!

Woher weis diese Batch Datei,
wo die Ausgabedatei hin soll?

Lg GRapper
Bitte warten ..
Mitglied: bastla
20.05.2011 um 16:50 Uhr
Hallo Grapper!

Ich hätte natürlich nicht ganz so schreibfaul sein und die Variable %Aus% (siehe Zeile 2) auch %Ausgabe% nennen können ...

Grüße
bastla
Bitte warten ..
Mitglied: Pago159
20.05.2011 um 16:57 Uhr
01.
set "Aus=TestdokumentTEST.txt" 
sagt der Batch aber doch nicht, wo diese Datei "TestdokumentTEST.txt" liegen soll, wenn sie nicht vorhanden ist,
diese Zeile gibt doch lediglich den Namen der Datei an oder sehe ich dies Falsch?

<Edit>
Kleiner Denkfehler von mir ;)
Mein Systemroot liegt gerade auf H:\
deshalb ist die Frage aufgekommen,
hat sich also von selbst geklärt

trotzdem Danke

</EDIT>
Lg Grapper
Bitte warten ..
Mitglied: bastla
20.05.2011 um 17:03 Uhr
Hallo Grapper!

Nur der Ordnung halber: Natürlich kann nicht nur ein Name, sondern auch ein Pfad angegeben werden:
set "Aus=D:\Ein beliebiger Ordner\TestdokumentTEST.txt"
Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Dateien suchen, kopieren und sortieren
Frage von BAD1HORBatch & Shell6 Kommentare

Hallo, folgendes Problem: Dateien, die auf einem Laufwerk monatsweise in Ordnern abgelegt sind, sollen per Batch auf ein anderes ...

Batch & Shell
Dateien in alphabetische Ordner sortieren
gelöst Frage von symei3Batch & Shell10 Kommentare

Hallo Forumsgemeinde, leider habe ich sehr wenig Ahnung von Batchdateien etc. Deswegen wird meine Frage vermutlich nur ein leises ...

VB for Applications
Textzeile in Datei einfügen wenn bestimmtes Wort nicht vorhanden
gelöst Frage von aletriVB for Applications9 Kommentare

Guten Abend allerseits Dieser Script fügt eine Textzeile in Datei ein aber auch dann wenn Zeile in diesem Fall ...

VB for Applications
VBS Textzeile in fsx.cfg Datei an bestimmte Stelle einfügen
gelöst Frage von aletriVB for Applications6 Kommentare

Guten Abende Leute Mit dem hier aufgeführten Script möchte ich den Text "AutogenDescriptionsFilename=AutogenDescriptions_EFRO.xml" einfügen was soweit auch mit der ...

Neue Wissensbeiträge
Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 2 StundenWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 2 StundenWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 14 StundenInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Verschlüsselung & Zertifikate

19 Jahre alter Angriff auf TLS funktioniert immer noch

Information von BassFishFox vor 21 StundenVerschlüsselung & Zertifikate1 Kommentar

Interessant zu lesen. Der Bleichenbacher-Angriff gilt unter Kryptographen als Klassiker, trotzdem funktioniert er oft noch. Wie wir herausgefunden haben, ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Von rj11 auf rj45
Frage von jensgebkenLAN, WAN, Wireless19 Kommentare

Hallo Gemeinschaft, könnt ihr mir vielleicht bei der anfertigung eines Kabels helfen - habe ein rj 11 stecker und ...

Netzwerkmanagement
NAS über zwei weitere Ethernet Anschlüsse verbinden
gelöst Frage von Sibelius001Netzwerkmanagement17 Kommentare

Sorry - ich bin hier wahrscheinlich als kompetter IT Trottel unterwegs. Aber eventuell kann mir jemand ganz einfach helfen: ...

Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...