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

Über Batch letzte Zeile in TXT ersetzen bzw löschen

Frage Entwicklung Batch & Shell

Mitglied: brainbug84

brainbug84 (Level 1) - Jetzt verbinden

23.10.2008, aktualisiert 18.10.2012, 11291 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 ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Bei copy aus FOR Schleife wird letzte Zeile abgeschnitten

Frage von miczar zum Thema Batch & Shell ...

Windows 7
Texte weisen Fehler auf letzte Zeile wie Barcod Striche (3)

Frage von Nemonautilus zum Thema Windows 7 ...

Windows 10
Batch: Copy file.txt Lokaler Drucker (1)

Frage von fluluk zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Linux
gelöst Boot failed: not a bootable disk (10)

Frage von Fleckmen zum Thema Linux ...

Windows Server
Probleme mit Client Software Zugriff auf Windows Server 2012 (8)

Frage von it-kolli zum Thema Windows Server ...

Multimedia & Zubehör
gelöst Iphone 6 prob (8)

Frage von jensgebken zum Thema Multimedia & Zubehör ...

Windows 7
gelöst Windows 7 Umzug zum neuen PC (SATA-Problem) (7)

Frage von MaxMoritz6 zum Thema Windows 7 ...