687
Goto Top

Dateien Löschen ?????

Hallo Leute,
habe auf unserem Server Diverse CAD Programme am laufen, und diese produzieren bei bestimmten Berechnungen Dateien die nicht Automatisch gelöscht werden (*.sli, *.smf, *.vmf, *.ctl, *.crg, *.odf, *.mmp, *_s.stl ).
Ich möchte nun diese Dateien jeden Tag Automatisch Löschen wenn sie ab dem Heutigen Datum Älter als z.b. 14 Tage sind.
Denn Sofort Löschen ist nicht möglich da manche Dateien noch ein paar Tage nach ihrer Entstehung gebraucht werden.
Ist Jemanden eine Lösung meines Problems via Batch oder Programms bekannt.

THX John

Content-ID: 261

Url: https://administrator.de/contentid/261

Ausgedruckt am: 05.11.2024 um 14:11 Uhr

ggedv
ggedv 27.03.2002 um 08:27:51 Uhr
Goto Top
Einfach ein Perl-, WSH- oder VBS-Script schreiben, der die Festplatte bzw. bestimmte Verzeichnisse durchsucht und Dateien nach bestimmten Kriterien (in Deinem Fall das Datum) selektiert und löscht. Das kannst Du jeden Tag mit dem "Geplante Tasks" zu einer bestimmten Uhrzeit ausführen lassen.

Solche Scripte zu schreiben ist nicht schwer. Hilfe findest Du z. B. unter
http://msdn.microsoft.com/scripting.

Achtung bei Antivirus-Programmen. Manche haben eine Einstellung, die Ausführung aller Scripte mit Zugriff auf Dateisystem verhindern. Das hat Auswirkungen nicht nur auf die o. g. Script-Sprachen, sondern auch auf z. B. PHP, CGI (z. B. Perl), JSP oder ASP.

CU

Gregor Gabor
http://www.NThelp.de
Floh
Floh 02.02.2005 um 18:29:43 Uhr
Goto Top
http://www.ashergul.net/executables/DeleteOlderFilesThan.exe

Nachdem ich eine ähnliche aufgabenstellung heute hatte und mir das rumgesuche im internet nach ein paar minuten zu blöd wurde hab ich eben schnell ein entsprechendes konsolen programm geschrieben.
obiger link führt zur exe, anbei noch der quellcode falls es jemand verändern möchte, für seine bedürfnisse (benötigt MFC)

Das Programm arbeitet noch nicht rekursiv in den verzeichnissen sondern nur im angegeben verzeichnis.

deleteFilesOlderThan.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung.
Aufgabe:
Lösche Dateien älter als ein betimmter Zeitraum vom heutigen Tag zurückliegend
Parameter:
/del Löscht die Dateien
/show Zeigt die Dateien welche in den Zeitraum fallen
timespan Zeitspanne dateien älter als heute-Zeitspanne (in Tagen) werden gelöscht
path Pfad zum Verzeichnis welches nach zu löschenden Dateien durchsucht werden soll
// extension Dateiendung nach welcher gesucht werden soll

#include "stdafx.h"
#include <stdio.h>
#include <afx.h>


int main(int argc, char* argv)
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
CTime tmNow,tmPast,tmMaxPast;
CTimeSpan tmDiff;
char action[5], directory[MAX_PATH],tmpDirectory[MAX_PATH], Extension[10];
int timespn;
char DirSpec[MAX_PATH];
DWORD dwError;

switch (argc) {

case 5 :
strcpy(action,argv[1]);
timespn = atoi(argv[2]);
strcpy(directory,argv[3]);
strcpy(Extension,argv[4]);
break;
default : printf("\nUSAGE:\t DeleteFilesOlderThan.exe [/del | /show] timespan path extension\n/del\tdelete the found files\n/show\tshow the files which will be deleted\n\ntimespan\tfiles older than timespan (in days) will be selected to show or\t\t\tdelete\npath\t\tpath to the directory which should be searched for older files\nextension\tfileextensions which should be found (* = all Files, *.exe search EXE-Files only)\n\n"); break;
}
tmDiff = CTimeSpan(timespn-1,0,0,0);
if (action) {
tmNow = CTime::GetCurrentTime();
tmMaxPast = tmNow - tmDiff;
strncpy(DirSpec,directory,strlen(directory)+1);
strcat(DirSpec,"\\");
strcat(DirSpec,Extension);

hFind = FindFirstFile(DirSpec, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE) {
printf("Invalid file handle. Error is %u\n",GetLastError());
return -1;
} else {
if (!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
tmPast = CTime(FindFileData.ftLastWriteTime);
printf("%s\t",tmPast.Format("%d.%m.%Y"));
printf("%s\t",FindFileData.cFileName);
if ((tmMaxPast > tmPast) && !stricmp(action,"/del")) {
printf("\tis deleted");
strcpy(tmpDirectory,directory);
strcat(tmpDirectory,"\\");
strcat(tmpDirectory,FindFileData.cFileName);
DeleteFile(tmpDirectory);
}
if ((tmMaxPast > tmPast) && !stricmp(action,"/show")) {
printf("\twill be deleted");
}
printf("\n");
}
while (FindNextFile(hFind, &FindFileData)) {
if (!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
tmPast = CTime(FindFileData.ftLastWriteTime);
printf("%s\t",tmPast.Format("%d.%m.%Y"));
printf("%s\t",FindFileData.cFileName);
if ((tmMaxPast > tmPast) && !stricmp(action,"/del")) {
printf("\tis deleted");
strcpy(tmpDirectory,directory);
strcat(tmpDirectory,"\\");
strcat(tmpDirectory,FindFileData.cFileName);
DeleteFile(tmpDirectory);
}
if ((tmMaxPast > tmPast) && !stricmp(action,"/show")) {
printf("\twill be deleted");
}
printf("\n");

}

}
}
dwError = GetLastError();
FindClose(hFind);
if (dwError != ERROR_NO_MORE_FILES) {
printf("FindNextFile error. Error is %u\n",dwError);
return -1;
}
}
return 0;
}
Floh
Floh 02.02.2005 um 18:33:06 Uhr
Goto Top
#include stdio.h
#include afx.h

jeweils mit den größer/kleinerzeichen
Floh
Floh 02.02.2005 um 18:35:21 Uhr
Goto Top
Eric123
Eric123 03.02.2005 um 10:32:46 Uhr
Goto Top
Möchte das programm gerne benutzen und benutzerdefiniert anpassen, was ist MFC ? Brauch das ja um etwas zu ändern...
Floh
Floh 03.02.2005 um 10:58:18 Uhr
Goto Top
und das ganze wird von Visual C++ von Microsoft genutzt
dergel
dergel 30.03.2005 um 17:00:02 Uhr
Goto Top
hi floh,
tolle sache...bin froh, das ich dieses tool hier gefunden habe.
bin leider im programmieren noch nicht eingestiegen face-sad
hätte jedoch anpassungsbedarf an dem tool
kann ich hier unterstützung von ihnen bekommen?
gerade diese rekursive abarbeitung der files und verzeichnisse wäre sehr interessant.
ist das viel aufwand?

...möchte logfiles in versch. verzeichniss-strukturen löschen.
die verzeichnissnamen werden automatisch generiert, kann somit keine festen namen im batch mitgeben.

wäre klasse hier hilfe zu bekommen.
vielen dank vorab...

gruss,
dergel
dergel
dergel 04.04.2005 um 09:56:27 Uhr
Goto Top
hallo zusammen,
das ganze hat sich erledigt...
habe einen weiteren artikel hier im board gefunden, der mir bei der lösung meines problems geholfen hat:

"Batch Datei: Alte Dateien nach gewissen Alter löschen"

danke an alle... (echt gutes tool, "delage32" von horst schaeffer)

so long,
dergel
FrankFiedler
FrankFiedler 31.08.2006 um 13:47:35 Uhr
Goto Top
guckst Du unter

www.frank-f.de/sw/xdel/

Beispiel: xdel /D:[Dein Ordner\Deine Dateien],/A:6,/P:C:\Löschprotokoll\Mailinglisten.txt (Diesen Aufruf in Verknüpfung stecken nun in im Autostart unterbringen)

löscht alle Dateien vom Typ [Deine Dateien - *.*usw.] im angegebenen Ordner die älter als 6 Tage sind und führt ein Protokoll drüber.

--
Der Fiedler