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, 11222 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
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
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 ...

Batch & Shell
gelöst Mittels Batch jede Zeile einer Textdatei prüfen (4)

Frage von Peter32 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...