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 Über Batch letzte Zeile in TXT ersetzen bzw löschen

Mitglied: brainbug84

brainbug84 (Level 1) - Jetzt verbinden

23.10.2008, aktualisiert 18.10.2012, 11866 Aufrufe, 3 Kommentare

Hi zusammen,

habe leider keine vergleichbaren Themen hier gefunden. Deswegen zu meiner Frage. Ich habe eine Textdatei bereits bearbeitet und möchte nur dass die letzte Zeile gelöscht wird bzw ersetzt. Das Problem hierbei ist, dass die Datei nicht mit einem Carriage Return enden soll, da sonst das Programm dass die Datei einliest Fehler bringt.

Bin sehr dankbar für jede Hilfe.

Gruß Sven
Mitglied: bastla
23.10.2008 um 21:22 Uhr
Hallo brainbug84!

Am saubersten bekommst Du das unter Verwendung von (temporärem) VBScript hin, etwa:
01.
@echo off & setlocal 
02.
set "Datei=D:\Deine Datei.txt" 
03.
set "Zeile=Neue letzte Zeile" 
04.
 
05.
set D=%temp%\DelLastLine.vbs 
06.
>%D%  echo Set fso=CreateObject("Scripting.FileSystemObject"):F=WScript.Arguments(0):If WScript.Arguments.Count^>1 Then E=WScript.Arguments(1) 
07.
>>%D% echo T=Split(fso.OpenTextFile(F).ReadAll, vbCrLF):Set O=fso.CreateTextFile(F,True):If E="" Then D=2 Else D=1 
08.
>>%D% echo For i = 0 To UBound(T)-D:O.WriteLine T(i):Next:If E="" Then O.Write T(i):Else:o.Write E:End If:O.Close 
09.
 
10.
cscript //nologo %D% "%Datei%" "%Zeile%"
Da Du Dich in Deiner Beschreibung anscheinend nicht entscheiden konntest, ob nun die letzte Zeile gelöscht oder ersetzt werden soll, kannst Du dies im Batch über die Zuweisung zur Variablen %Zeile% in Zeile 3 steuern:

Wenn dort, wie im Beispiel, ein Text angegeben wird, so ersetzt dieser die derzeit letzte Zeile in der Datei.

Verwendest Du die Schreibweise
set Zeile=
so wird die letzte Zeile der Datei entfernt.

Grüße
bastla
Bitte warten ..
Mitglied: brainbug84
24.10.2008 um 10:08 Uhr
Hi bastla,

Dank dir so funktioniert es auf jeden Fall. Aber nur mit Batch-Befehlen funktioniert das dann nicht oder? Weil ich würde es gern verstehen was du gemacht hast, aber mit VB kenn ich mich leider ned so aus.

Gruß brainbug84
Bitte warten ..
Mitglied: bastla
24.10.2008, aktualisiert 18.10.2012
Hallo brainbug84!

Aber nur mit Batch-Befehlen funktioniert das dann nicht oder?
Unter Verwendung eines hier gezeigten "Biber-Special" (und eines im Nachbarthread dargestellten "Letzte-Zeilen-Lösch"-Batches) ließe sich das auch per native Batch realisieren:
01.
@echo off & setlocal 
02.
set "Datei=D:\Deine Datei.txt" 
03.
set "Zeile=Die ganz neue letzte Zeile" 
04.
 
05.
set "Bak=bak" 
06.
set "Ret=%temp%\ret" 
07.
set Anzahl=0 
08.
for /f "delims=:" %%i in ('findstr /n "^" "%Datei%"') do set Anzahl=%%i 
09.
set /a MitCR=%Anzahl%-2 
10.
set /a OhneCR=%Anzahl%-1 
11.
 
12.
if %MitCR% leq 0 ( 
13.
    echo Die Datei "%Datei%" enthaelt zu wenig Zeilen! 
14.
    goto :eof 
15.
16.
 
17.
move "%Datei%" "%Datei%.%Bak%" 
18.
echo\>%Ret% 
19.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Datei%.%Bak%"') do ( 
20.
    if %%i leq %MitCR% (>>"%Datei%" echo\%%j) 
21.
    if %%i equ %OhneCR% ( 
22.
        if defined Zeile ( 
23.
            set /p=%Zeile%<%Ret%>>"%Datei%" 
24.
        ) else ( 
25.
            set /p=%%j<%Ret%>>"%Datei%" 
26.
27.
28.
)
Wenn die letzte Zeile nicht ersetzt, sondern gelöscht werden soll, einfach den "Ersatztext" weglassen und die Zeile 3 so schreiben:
01.
set Zeile=
Falls Dich die VBS-Variante trotzdem interessieren sollte, hier die ausführliche Form (mit Kommentaren):
01.
'Für Dateizugriff benötigtes Objekt erzeugen 
02.
Set fso=CreateObject("Scripting.FileSystemObject") 
03.
 
04.
'Ersten Aufrufparameter (=Dateiname) einlesen 
05.
F=WScript.Arguments(0) 
06.
 
07.
'Falls es mehr als einen Parameter gibt: Zweiten Parameter (=Neue Zeile) einlesen 
08.
If WScript.Arguments.Count>1 Then E=WScript.Arguments(1) 
09.
 
10.
'Gesamte Textdatei (lt Parameter 1) in ein Array einlesen 
11.
'Ergebnis: Zeilen befinden sich in T(0) bis T(Zeilenanzahl - 1) 
12.
T=Split(fso.OpenTextFile(F).ReadAll, vbCrLF) 
13.
 
14.
'Ausgabe in Datei vorbereiten (vorhandene Datei dabei überschreiben) 
15.
Set O=fso.CreateTextFile(F,True) 
16.
 
17.
'Abhängig davon, ob ein Ersetzen der letzten Zeile stattfinden soll, 
18.
'die Anzahl der am Ende nicht mit CR auszugebenden Zeilen festlegen 
19.
If E="" Then D=2 Else D=1 
20.
 
21.
'Alle Zeilen vom Beginn der Datei bis zur letzten mit CR auszugebenden Zeile 
22.
(= vorletzte oder vorvorletzte, abhängig vom Inhalt der Variablen D) durchgehen ... 
23.
For i = 0 To UBound(T)-D 
24.
    '... und in Datei schreiben (Abschluss mit CR) 
25.
    O.WriteLine T(i) 
26.
Next 
27.
 
28.
'Wenn die letzte Zeile nicht ersetzt werden soll ... 
29.
If E="" Then 
30.
    '... vorletzte Zeile ohne CR schreiben, 
31.
    O.Write T(i) 
32.
 
33.
'ansonsten ... 
34.
Else 
35.
    '... Ersatzzeile ohne CR schreiben 
36.
    O.Write E 
37.
End If 
38.
 
39.
'Datei schließen 
40.
O.Close
Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Letzte Zeile einer .txt in eine andere .txt ausschneiden per Batch

gelöst Frage von AlexIOTBatch & Shell4 Kommentare

Hallo zusammen, zu meinem obrigen Thema habe ich leider nur in Richtung löschen und nicht in Richtung ausschneiden etwas ...

Batch & Shell

Mehrere txt Dateien einlesen und letzte Zeile löschen

gelöst Frage von THRILLERBatch & Shell1 Kommentar

Hallo Gemeinde, ich beschäftige mich mit folgendem Problem. Und zwar will ich aus einem Ordner mehrere Dateien einlesen und ...

Batch & Shell

Batch um Zeichen aus erster und letzter Zeile einer TXT Datei zu löschen

Frage von Bobby0712Batch & Shell2 Kommentare

Hallo. Wie der Titel schon sagt suche ich eine möglichkeit wie ich aus einer TXT Datei aus der ersten ...

Batch & Shell

Batch: bestimmten string aus einer Zeile in txt löschen

Frage von Vit1985Batch & Shell4 Kommentare

Hallo, ich habe eine Textdatei und dort möchte ich einen bestimmten string löschen! Beispielzeile: Command: Hallo, wie Ich möchte ...

Neue Wissensbeiträge
Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 3 StundenSicherheit

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 12 StundenInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 1 TagErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Windows 10

Windows 10 on ARM: von Microsoft entfernte Info - Klartext, was nicht geht

Information von kgborn vor 1 TagWindows 10

Windows 10 on ARM ist ja eine neue Variante, die Microsoft im Verbund mit Geräteherstellern am Markt etablieren will. ...

Heiß diskutierte Inhalte
Server
Route-Befehl Unterstützung (unter CMD)
gelöst Frage von FKRR56Server36 Kommentare

Guten Tag , i.M. habe ich Probleme über den CMD-Route-Befehl ein Routing auf einen entfernten Server zuzulassen. Der Server ...

Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1028 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgbornMicrosoft17 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Webbrowser
Welcher Browser ist der Beste?
Frage von justtinWebbrowser15 Kommentare

Hallo Leute Ich habe eine interessante Frage. Mich wurde mal interessieren welcher Browser ist eure meinung nach der beste? ...