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

Textzeile aus Datei Kopieren und sortieren

Frage Entwicklung Batch & Shell

Mitglied: Pago159

Pago159 (Level 2) - Jetzt verbinden

17.05.2011, aktualisiert 18.10.2012, 4122 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 ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Ordner per Batch verschieben, Datei kopieren (2)

Frage von Shape.Shifter zum Thema Batch & Shell ...

C und C++
gelöst In einer Windows Form Anwendung per Button eine Datei kopieren (4)

Frage von Knuefi zum Thema C und C ...

Batch & Shell
gelöst Powershell Datei kopieren mit ACL Script funktioniert nicht (4)

Frage von xpxy15 zum Thema Batch & Shell ...

Batch & Shell
Batch: Word Datei kopieren und umbennen (9)

Frage von ExcelNoob177 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...