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

Teil aus Textfile auslesen und in neues Textfile speichern

Frage Entwicklung Batch & Shell

Mitglied: marcushb

marcushb (Level 1) - Jetzt verbinden

02.12.2010 um 11:24 Uhr, 2708 Aufrufe, 7 Kommentare

Hallo liebes Forum,

ich bin auf der Suche nach einem kleinen Batch-Script für folgende Situation.

Ich lese via Script den Inhalt eines bestimmten FTP Verzeichnisses aus, und will aber ich brauche nicht den Inhalt der Subfolder.

Der Inhalt des Textfiles sieht wie folgt aus:


-rw-r----- 1 ftpxxxx ace 211495 Dec 2 07:21 049_pdf_20101201.zip

history:
total 80
-rw-r--r-- 1 ace ace 32636 Dec 1 15:45 049_1_i_20101201_759.txt
-rw-r--r-- 1 ace ace 4047 Dec 1 15:47 049_1_p_20101201_760.txt
-rw-r--r-- 1 ace ace 3061 Dec 1 15:19 DE1_CUST_20101201161904.XML


Ich möchte gerne alle Zeilen bis zur ersten Leerzeile auslesen und in ein neues TXT File schreiben.

Hat jemand zufällig eine IDee ?

Vielen Dank !

Gruß
Marcus
Mitglied: 60730
02.12.2010 um 12:08 Uhr
moin,

demo für den cmd Prompt:

for /f "tokens=2,*" %a in (laufwerk:\pfad\text.txt) do echo %a %b>>Laufwerk:\pfad\output.txt

  • laufwerk:\pfad\ natürlich an deine Werte anpassen
  • dito mit den .txt

"nur" macht er das haargenauso - wie du es beschrieben hast - auch aus total 80 wird 80

Falls das nicht so sein soll und total die Ausnahme wäre, wo die zeile mit t beginnt:
for /f "eol=t tokens=2,*" %a in (laufwerk:\pfad\text.txt) do echo %a %b>>Laufwerk:\pfad\output.txt
(jede Zeile, die mit t beginnt - wird ignoriert)

Im anderen Fall, dass nur Zeilen die "r w ace" haben - würde es so laufen:
for /f "tokens=2,*" %a in ('"findstr "r w ace" "laufwerk:\pfad\text.txt"') do echo %a %b>>Laufwerk:\pfad\output.txt

Um testen alles hinter und incl. >> mal weglassen.

Alles weitere
01.
for /?
in einer batch aus jedem einzelnen % ein doppeltes %% machen - sonst ist es so allein und auf einem Bein kann man nicht laufen


Gruß
Bitte warten ..
Mitglied: marcushb
02.12.2010 um 12:16 Uhr
Hi,

ich glaube da habe ich mich wohl etwas falsch ausgedrückt, ich möchte alles was über history steht auslesen und in ein neues File schreiben.Wenn ich dein Bsp. ausprobiere bekomme ich sozusagen "fast" alles in die neue Datei.

Gruß
Marcus
Bitte warten ..
Mitglied: Friemler
02.12.2010 um 12:46 Uhr
Hallo Marcus,

der folgende Code sollte Dein Problem lösen.
01.
@echo off 
02.
 
03.
setlocal enabledelayedexpansion 
04.
 
05.
set "OutputEnd=0" 
06.
 
07.
type NUL>"Laufwerk:\pfad\output.txt" 
08.
 
09.
for /f "tokens=1,* delims=:" %%k in ('findstr /n $ "laufwerk:\pfad\text.txt"') do ( 
10.
  if "%%l" equ "" set "OutputEnd=1" 
11.
  if !OutputEnd! equ 0 echo %%l>>"Laufwerk:\pfad\output.txt" 
12.
13.
 
14.
endlocal
FINDSTR sucht nach Zeilen, die ein Zeilenende ($) enthalten (findet also alle Zeilen) und schreibt die Zeilennummern (wegen der Option /n) mit einem nachfolgenden Doppelpunkt vor den Zeileninhalt. FOR behandelt diesen Doppelpunkt als Trennzeichen, in %%k steht die Zeilennummer, in %%l der Zeileninhalt. Wenn %%l nichts enthält (Leerzeile gefunden), wird die Variable OutputEnd auf 1 gesetzt und somit die Ausgabe der nachfolgenden Zeilen in Skript-Zeile 11 unterbunden.

Gruß
Friemler
Bitte warten ..
Mitglied: Biber
02.12.2010 um 12:46 Uhr
Moin marcushb,

zum Verarbeiten einer bestimmten (der ersten, der letzten, der 13ten..) Zeile einer Textdatei mit FOR/F-Anweisungen findest du einige Beispiele im Bereich Batch & Shell mit Hilfe der Suchfunktion.
Du kannst den ...DO..-Teil etwas aufbrezeln mit

FOR /F ... %i in (..) DO if not defined x (echo %i>neueDatei.txt) & set "x=leberkäse"

Grüße
Biber
Bitte warten ..
Mitglied: bastla
02.12.2010 um 16:47 Uhr
@Friemler
FINDSTR sucht nach Zeilen, die ein Zeilenende ($) enthalten (findet also alle Zeilen)
... mit ev der Ausnahme der letzen Zeile (falls diese eben nicht mit einem CR und/oder LF endet) - da aber alle Zeilen jedenfalls einen Anfang haben:
for /f "tokens=1,* delims=:" %%k in ('findstr /n "^" "laufwerk:\pfad\text.txt"') do (
Anstelle der Zuweisung von "0" bzw "1" zur Variablen %OutputEnd% tendiere ich eher dazu, sie im "0"-Fall per
set "OutputEnd="
zu löschen, da sie so ohne "delayedExpansion" einfach per "if defined OutputEnd" abgefragt werden kann.

Grüße
bastla
Bitte warten ..
Mitglied: Friemler
02.12.2010 um 16:58 Uhr
@bastla
... mit ev der Ausnahme der letzen Zeile (falls diese eben nicht mit einem CR und/oder LF endet)
Stimmt, Vorsicht ist die Mutter der Porzellankiste. In diesem Fall aber vernachlässigbar, da der TO ja sowieso nur bis zur ersten Leerzeile ausgeben will. Außerdem ist die Textdatei ein Verzeichnislisting, das von einem Skript generiert wurde. Man kann also erwarten, dass auch die letzte Zeile mit CR/LF endet.

[Edit]
Da schreibt man eine Antwort und schon hat der Kerl noch eine sinnvolle Verbesserung gefunden ! Ich meine die Sache mit dem Löschen von OutputEnd, statt die Variable auf 0 zu setzen.

Gruß
Friemler
Bitte warten ..
Mitglied: bastla
02.12.2010 um 17:38 Uhr
@Friemler
Du erklärst so schön, was Dein Batch macht - da wollte ich auch einmal etwas (und dann noch ein weiteres Etwas ) beitragen ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (17)

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

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...