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
Kommentar vom Moderator Biber am 31.01.2011 um 10:33:43 Uhr
Codeformatierung und verschoben von "Windows-weiss-nich'-genau" nach Bätchkrams".
GELÖST

Per Batch alles über 5000 Zeilen in einer Textdatei löschen

Frage Entwicklung Batch & Shell

Mitglied: fyrb38

fyrb38 (Level 1) - Jetzt verbinden

31.01.2011, aktualisiert 14:55 Uhr, 3399 Aufrufe, 3 Kommentare

Guten Morgen,

ich bin totaler Anfänger in Batchdateien.
Ich habe laufe letzter Woche eine Batchdatei mit Hilfe von google etc. geschrieben.
Diese Datei soll eine bestimmte Datei "Hilfsdatei.txt" überprüfen, wie alt diese ist.
Wenn diese Datei älter als 15 Minuten ist, wird eine "Alarm.txt" Datei erstellt. In dieser Datei stehen dann Datum, Uhrzeit und dass die Datei nicht mehr aktuell ist.
Das ganze Vorgehen, sprich, Datum, Uhrzeit und einfach nochmal ein Zusatz, ob die Hilfsdatei aktuell ist oder nicht, wird im log.txt festgehalten.
Mein Wunsch ist nun, dass alles was über 5000 Zeilen im log.txt steht, gelöscht wird.

Ich habe schon recherchiert und auch in diesem Forum was dazu gefunden, nur leider gab es keine Erklärungen dazu und konnte nicht viel damit anfangen
Falls noch irgendwelche Angaben benötigt werden, einfach melden

Noch eine Bitte, ob ihr bei euren Antworten Zeile für Zeile erklären könntet. Wie gesagt, ich bin Anfänger und möchte verstehen, was ich da mache.
Vielen Dank schonmal im Voraus und hier mein Skript:

01.
ECHO ON 
02.
 
03.
SET Zieldatei=C:\Test\Hilfsdatei.txt 
04.
SET LastModified=15  
05.
SET LOGPATH="C:\XXX\Test1\log.txt"  
06.
SET ALARMPATH="C:\XXX\Test1\Alarm.txt" 
07.
 
08.
ECHO Aktuelles Datum: >> %LOGPATH% 
09.
Date /t	>> %LOGPATH%  
10.
ECHO ------------------ >> %LOGPATH%  
11.
Echo Aktuelle Uhrzeit: >> %LOGPATH%  
12.
Time /t >> %LOGPATH%  
13.
 
14.
IF NOT EXIST %Zieldatei% GOTO :FILEDOESNOTEXIST 
15.
"C:\XXX\Test1\WasFile" %Zieldatei% modified before now-%LastModified% >> %LOGPATH%  
16.
if not errorlevel 1 goto TRUE >> %LOGPATH% 
17.
if not errorlevel 0 goto FALSE >> %LOGPATH% 
18.
  
19.
 
20.
:LASTMODIFICATION >> %LOGPATH%  
21.
ECHO ==================================================================================== >> %LOGPATH% 
22.
EXIT  
23.
 
24.
 
25.
:TRUE   
26.
ECHO ==================================================================================== >> %ALARMPATH%  
27.
ECHO Datei wurde NICHT innerhalb der letzten 15 Minuten aktualisiert. >> %ALARMPATH% 
28.
ECHO. >>%ALARMPATH% 
29.
ECHO Aktuelles Datum: >> %ALARMPATH%  
30.
Date /t	>> %ALARMPATH%  
31.
ECHO ------------------ >> %ALARMPATH%  
32.
Echo Aktuelle Uhrzeit: >> %ALARMPATH%  
33.
Time /t >> %ALARMPATH% 
34.
ECHO. >> %ALARMPATH% 
35.
ECHO ==================================================================================== >> %ALARMPATH% 
36.
 
37.
 
38.
ECHO. >>%LOGPATH% 
39.
ECHO Datei wurde NICHT innerhalb der letzten 15 Minuten aktualisiert. >> %LOGPATH%  
40.
ECHO ==================================================================================== >> %LOGPATH%  
41.
EXIT 
42.
 
43.
 
44.
:FALSE   
45.
ECHO ==================================================================================== >> %LOGPATH%  
46.
ECHO Datei wurde innerhalb der letzten 15 Minuten aktualisiert. >> %LOGPATH%  
47.
ECHO ==================================================================================== >> %LOGPATH%  
48.
EXIT 
49.
  
50.
 
51.
:ERROR  
52.
ECHO Datei nicht gefunden 
53.
EXIT  
54.
 
55.
 
56.
 
57.
:FILEDOESNOTEXIST  
58.
ECHO ==================================================================================== >> %LOGPATH%  
59.
EXIT
Mitglied: bastla
31.01.2011 um 14:42 Uhr
Hallo fyrb38!

Das Kürzen der Logdatei ließe sich im einfachsten Fall (und nur mit Bordmitteln) etwa so realisieren:
01.
set "LogTemp=%temp%\Log.txt" 
02.
del "%LogTemp%" 2>nul 
03.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%LOGPATH%"') do if %%i leq 5000 >>"%LogTemp%" echo\%%j 
04.
move "%LogTemp%" "%Log%"
Kurze Erklärung:
Da der Name der temporären Logdatei öfter benötigt wird, ist es sinnvoll, ihn einer Variablen zuzuweisen.

Eigentlich sollte es die temporäre Logdatei nicht (mehr) geben, aber sicher ist sicher, und daher wird sie vorweg gelöscht. Die unschöne Fehlermeldung, falls sie erwartungsgemäß tatsächlich nicht vorhanden ist, kann man/frau per "2>nul" elegant verschwinden lassen.

Mit der "for /f"-Schleife kann ein Dateiinhalt (oder auch, wie hier, die Ausgabe eines Befehles) zeilenweise abgearbeitet werden, wobei durch die Angabe eines Trennzeichens ("delimiter", hier: ":") und die Festlegung der benötigten Teilstücke ("tokens", hier: Teil 1 vor dem ersten ":" und der Rest = alles nach dem ersten ":") eine Zerlegung dieser Zeile vorgenommen werden kann. Die entstehenden Teile werden anhand des vorgegebenen Anfangsbuchstaben der "Laufvariablen" benannt - hier entstehen also die Teile "%%i" und "%%j".

Die angesprochenen Einzelzeilen entstehen aufgrund der Ausgabe des Befehles "findstr /n "^" "%LOGPATH%". Durch die Suche nach "^" (entspricht einem Zeilenanfang, und den hat sogar eine ansonsten leere Zeile) werden alle Zeilen der Logdatei gefunden und (wegen "/n") nummeriert im Format
1:Das ist die erste Zeile 
... 
5000:Hier hätten wir Zeile 5000 ... 
5001:... und 5001 
... 
18267:Endlich am Ende!
ausgegeben. Wenn diese Zeilen nun am ":" geteilt werden, steht im ersten Teil die Zeilennummer und im zweiten Teil der gesamte Zeileninhalt.

Das für jede Zeile ausgeführte "if %%i leq 5000" prüft nun die Zeilennummer darauf hin, ob sie <= ("less or equal") 5000 ist und gibt nur in diesem Fall die Zeile in die temporäre Logdatei aus.

Die Schreibweise "echo\%%j" sorgt durch den "\" dafür, dass im Falle, dass %%j keinen Inhalt hat (= Leerzeile), nicht die Statusinformation "ECHO ist eingeschaltet (ON).", sondern tatsächlich eine Leerzeile in die temporäre Logdatei geschrieben wird.

Nach der Schleife enthält die temporäre Logdatei nur die ersten 5000 Zeilen und kann nun die Originaldatei ersetzen. Durch die Verwendung von "move" wird dabei gleichzeitig die Temporärdatei de facto gelöscht.

Grüße
bastla

P.S.: Die Zeilen 5, 6 und 15 würde ich etwas anonymer gestalten ...
Bitte warten ..
Mitglied: fyrb38
31.01.2011 um 15:02 Uhr
Hallo Bastla,

Vielen Dank schonmal, auch für den den Hinweis auf Zeile 5, 6 und 15.
Ich bin mittlerweile weiter gekommen und das Problem ist vielleicht schon gelöst.
Ich werd mir bei Zeit deinen Beitrag nochmal in Ruhe durchlesen, da es mir wichtig ist mehr und mehr dazu zu lernen.
Auf jeden Fall, werd ich mich melden, sobald das Produkt fertig ist oder noch Fragen offen sind.

Grüße
Bitte warten ..
Mitglied: pieh-ejdsch
31.01.2011 um 20:52 Uhr
moin Ihr beiden,
das mit dem 5000 Zeilen ist ja schon OK --- ABER,
Zitat von fyrb38:
Das ganze Vorgehen, sprich, Datum, Uhrzeit und einfach nochmal ein Zusatz, ob die Hilfsdatei aktuell ist oder nicht, wird im log.txt festgehalten.
Mein Wunsch ist nun, dass alles was über 5000 Zeilen im log.txt steht, gelöscht wird.
15."C:\XXX\Test1\WasFile" %Zieldatei% modified before now-%LastModified% >> %LOGPATH% 
usw...
wenn in diese Log.txt neue Informationen drangeschrieben werden kannst Du die 5000 Zeilen auch ausdrucken und an die Wand hängen - ist genauso Aktuell wie immer!!

um der Allgemeinen Betriebsblindheit etwas beizutragen:
01.
move "%logpath%" "%logpath%00" 
02.
for /f "delims=:" %%j in ('findstr /n "^" "%logpath%00" ^|find /c ":"') do for /f %%k in ('set /a "Lines=%%j-5000"') do if %%k gtr 0 (more +%%k "%logpath%00">"%logpath%") else move  "%logpath%00" "%logpath%"
Erklärung:
log.txt wird in log.txt00 Umbenannt
die Anweisung in der 1. Forschleife holt die Zeilenanzahl in %%j.
deswegen wird in der Zweiten Forschleife die zu Überspringenden Zeilen=(Zeilenanzahl)-(zu Überspringende Zeilen) ausgerechnet.
wenn das Ergebnis kleiner als 1 ist wird die log.txt zurückbewegt, sonst werden die max letzten 5000 Zeilen in die log.txt geschrieben.

Gruß Phil
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Mittels Batch jede Zeile einer Textdatei prüfen
gelöst Frage von Peter32Batch & Shell4 Kommentare

Hallo, ich habe eine Textdatei (Projekte.txt), die etwa so aufgebaut ist Nun möchte ich gerne, dass ein Batch-Script jede ...

Batch & Shell
Bestimmte Zeile einer Textdatei mit Batch auslesen
gelöst Frage von PinkFLuffyUnicornBatch & Shell2 Kommentare

Hi, ich habe ein kleines Batch Script, welches mir den Status der Firewall ausgeben soll(ob an oder aus) der ...

Batch & Shell
Textdatei Zeile für Zeile auslesen
Frage von RIPUEDBatch & Shell

Hallo, ich würde gerne mit einem Batch-Skript Zeilen aus einer Textdatei einzeln und nacheinander auslesen und diese dann nach ...

Batch & Shell
Per Batch erste 15 Zeichen in jeder Zeile einer Textdatei lassen. Den Rest - löschen. Wie?
gelöst Frage von takitanoBatch & Shell9 Kommentare

Hallo an alle, ich habe folgendes Problem: in einer Texdatei habe ich ca. 60.000.000 Zeilen (453 MB) Jede Zeile ...

Neue Wissensbeiträge
Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 1 TagMicrosoft Office9 Kommentare

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Datenbanken

Upgrade MongoDB 3.4 auf 3.6

Erfahrungsbericht von Frank vor 1 TagDatenbanken

Seit kurzem gibt es das 3.6 Update für die MongoDB: Sicherheit, das Sortieren, Aggregation und auch die Performance wurde ...

SAN, NAS, DAS

Backdoor Zugang und Upload-Bug in vielen Western Digital MyCloud Geräten

Information von Frank vor 1 TagSAN, NAS, DAS2 Kommentare

James Bercegay von der Firma Gulftech hat die Fehler an Western Digital gemeldet und das Unternehmen stellt bereits ein ...

Microsoft Office

Outlook 2016 - Beim Weiterleiten keine PDF Anhänge mehr - KB4011626 entfernen

Erfahrungsbericht von Deepsys vor 1 TagMicrosoft Office3 Kommentare

Wenn ihr feststellt das ihr beim Weiterleiten von E-Mails keine PDF Anhänge mehr versendent, dann dankt Microsoft. Diese tolle ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner15 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...

iOS
Einladung vom iphone kalender
Frage von jensgebkeniOS15 Kommentare

Hallo Gemeinschaft, folgendes Problem - immer wenn ich von meinem Iphone einen Termin einztrage und diesem Termin Teilnehmer zuweise, ...

Windows Netzwerk
Drucker isolieren in Windows Domäne
gelöst Frage von lcer00Windows Netzwerk14 Kommentare

Hallo zusammen, habe eine Windows-AD (2012R2) in der es einen Druckerserver gibt. Mittlerweile verliere ich das Vertrauen in die ...