كيف يمكنني حذف الملفات القديمة من الدليل مع الاحتفاظ بأحدث الملفات على Windows [نسخة مكررة]

StackOverflow https://stackoverflow.com/questions/50902

  •  09-06-2019
  •  | 
  •  

سؤال

التكرار المحتمل:
ملف دفعي لحذف الملفات الأقدم من N أيام

أرغب في تشغيل مهمة Windows مجدولة تحذف جميع الملفات من دليل مضى عليه أكثر من أسبوعين.

والسبب هو أن هذه هي سجلات IIS وTomcat التي تملأ الخادم الخاص بي، ولكنني أريد الاحتفاظ بأحدث السجلات في حالة حاجتي إلى التحقيق في مشكلة ما.

هل يعرف أحد طريقة سهلة للقيام بذلك؟

هتافات

نيجي

هل كانت مفيدة؟

المحلول

بناء الجملة الدقيق: FORFILES /p d:\new /d -30 /m * /c "cmd /c del @file"

نصائح أخرى

إن أبسط طريقة هي تشغيل ملف .bat أسبوعيًا أو شهريًا.

cd \mylog\dir
mkdir archive
del /Q .\archive\*.log
move *.log .\archive

إذا كنت تريد شيئًا أكثر تعقيدًا، فراجع تنزيل أدوات cygwin لاستخدام أوامر un*x مثل، أو ربما ابحث في Powershell.

مع VBScript، مقتبس من إجابات البرمجة النصية

Dim fso, startFolder, OlderThanDate
Set fso = CreateObject("Scripting.FileSystemObject")

startFolder = "E:\temp"           ' folder to start deleting (subfolders will also be cleaned)

OlderThanDate = DateAdd("d", -07, Date)  ' 07 days (adjust as necessary)

DeleteOldFiles startFolder, OlderThanDate

Function DeleteOldFiles(folderName, BeforeDate)
    Dim folder, file, fileCollection, folderCollection, subFolder

    Set folder = fso.GetFolder(folderName)

    Set fileCollection = folder.Files

    For Each file In fileCollection
        If file.DateLastModified < BeforeDate Then
            ' fso.DeleteFile(file.Path)    # Modify this to delete after testing
            WScript.StdOut.WriteLine (file.Path)
        End If
    Next

    Set folderCollection = folder.SubFolders
    For Each subFolder In folderCollection
        DeleteOldFiles subFolder.Path, BeforeDate
    Next

End Function

يمكنك تشغيل هذا البرنامج النصي باستخدام CScript

@ جايسون:فائدة لطيفة، FORFILES من مجموعة الموارد

جدولة ملف دفعي للتعامل مع هذا.

سيؤدي هذا السطر إلى حذف كافة الملفات (*.*) الموجودة في c:\mydirectory والتي مضى عليها أكثر من 14 يومًا:

FORFILES -pc:\mydirectory -s -m*.* -d-14 -c"DEL @FILE"

ضع ذلك في ملف نصي، وأعد تسميته إلى شيء مثل "deletefiles.bat" وقم بجدولة ذلك.

لم أختبر هذا، ولكن ينبغي أن يكون من السهل بما فيه الكفاية لمحاولة.


يحرر:إذا كنت تستخدم هذا، فتأكد من أنك تفهم ما يحدث - فالعلم -s يخبره بتكرار الدلائل الفرعية، وقد لا يكون هذا هو ما تريد حدوثه.قد تحتاج أيضًا إلى تحديد بعض العلامات لأمر DEL أيضًا.:)


يحرر:أدركت أنك بحاجة إلى ذلك تحميل الاشياء من مايكروسوفت لكي يعمل FORFILES.يعجبني الحل المقبول أيضًا، لأنه ليس من الضروري أن يكون لديك أي شيء خاص.المشكلة الوحيدة هي أن ذلك يحدث فقط كل أسبوعين بدلاً من تشغيل عملية يومية لإزالة كل الأشياء التي مضى عليها أكثر من 14 يومًا.لما يستحق ذلك.:ص

لماذا لا تكتب ملف دفعي أو برنامج بوويرشيل النصي وتجدوله؟

النصي لحذف الملفات الأقدم من تاريخ محدد.

من السهل جدًا القيام بذلك إذا كان لديك بيرل (أو ما شابه) مثبتًا على الخادم:

#!perl
foreach my $file (</path/to/logs/*.log>) {
  next unless -M $file > 14;
  print "Deleting $file...\n";
  # unlink $file or die "Failed to remove $file: $!";
}

تم التعليق على السطر الذي يقوم بالحذف بالفعل، نظرًا لاحتمال وجود أطفال في المنزل :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top