687
26.03.2002, aktualisiert am 31.08.2006
33371
9
0
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 261
Url: https://administrator.de/contentid/261
Ausgedruckt am: 05.11.2024 um 14:11 Uhr
9 Kommentare
Neuester Kommentar
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
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
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;
}
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;
}
hi floh,
tolle sache...bin froh, das ich dieses tool hier gefunden habe.
bin leider im programmieren noch nicht eingestiegen
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
tolle sache...bin froh, das ich dieses tool hier gefunden habe.
bin leider im programmieren noch nicht eingestiegen
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
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
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