(x)日より古いファイルを削除しますか?


31

(n)日よりも古い特定のフォルダー内のすべてのファイルを削除するための優れたWindowsコマンドラインオプションとは何ですか?

また、これらのファイルが何千もある可能性があることに注意してください。したがってforfiles、シェルを使用することcmdはここでは素晴らしいアイデアではありません。かなり厄介なハックだと思うので、もっとうまくやれるかどうか見てみましょう!

理想的には、Windows Server 2008に組み込まれている(または簡単にインストールできる)ものです。


2
内部CMD.EXEコマンドのみを使用する.BATファイルに基づく新しいメソッドがここに投稿されました:stackoverflow.com/questions/9746778/…–

回答:


43

私はもう少し見て回ると、Powershellの方法見つけました

指定したフォルダーから8日以上経過したすべてのファイルを削除します(プレビュー付き)

dir |? {$_.CreationTime -lt (get-date).AddDays(-8)} | del -whatif

(-whatifを削除して、それを実現します)


1
確認のため、これによりファイルが完全に削除されますか、それともリサイクルされますか?
TimS

暗記のためにあまりにもハードオプス!!私はPowerShellを愛するが、私はより良い方法を使用していると思うのrobocopyを
AminM

7

JeffのPowerShellコマンドが大好きですが、PowerShellを使用しないWindowsマシン用の代替vbsソリューションについては、次の方法を試すことができます。

名前を付けて保存し<filename>.vbsて実行:

<filename>.vbs <target_dir> <NoDaysSinceModified> [Action]

3番目のパラメーター[Action]はオプションです。それなしでは、古いファイル<NoDaysSinceModified>がリストされます。それDより古いファイルを削除するように設定すると<NoDaysSinceModified>

PurgeOldFiles.vbs "c:\Log Files" 8

8日以上経過したすべてのファイルをリストしますc:\Log Files

PurgeOldFiles.vbs "c:\Log Files" 8 D

8日以上経過したすべてのファイルを削除しますc:\Log Files

注:これは、SQLServerCentral.comのHaidong Jiのスクリプトの修正バージョンです

Option Explicit
on error resume next
    Dim oFSO
    Dim sDirectoryPath
    Dim oFolder
    Dim oFileCollection
    Dim oFile
    Dim iDaysOld
    Dim fAction

    sDirectoryPath = WScript.Arguments.Item(0)
    iDaysOld = WScript.Arguments.Item(1)
    fAction = WScript.Arguments.Item(2)
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    set oFolder = oFSO.GetFolder(sDirectoryPath)
    set oFileCollection = oFolder.Files

If UCase(fAction) = "D" Then
'Walk through each file in this folder collection. 
'If it is older than iDaysOld, then delete it.
    For each oFile in oFileCollection
        If oFile.DateLastModified < (Date() - iDaysOld) Then
            oFile.Delete(True)
        End If
    Next
else
'Displays Each file in the dir older than iDaysOld
    For each oFile in oFileCollection
        If oFile.DateLastModified < (Date() - iDaysOld) Then
            Wscript.Echo oFile.Name & " " & oFile.DateLastModified
        End If
    Next
End If


'Clean up
    Set oFSO = Nothing
    Set oFolder = Nothing
    Set oFileCollection = Nothing
    Set oFile = Nothing
    Set fAction = Nothing

このようなものを使用して、古いWebサーバーのログを削除します。かなりうまくいきました。
jeffspost 09

4

実際にはコマンドラインではありませんが、LINQPadをC#スクリプティングホストとして使用するのが好き
です。

var files = from f in Directory.GetFiles(@"D:\temp", "*.*", SearchOption.AllDirectories)
            where File.GetLastWriteTime(f) < DateTime.Today.AddDays(-8)
            select f;

foreach(var f in files)
    File.Delete(f);

Linqは本当に素晴らしいです。PowerShellに持ち込みたいと思います。
テイラーギブ


3

cygwin(または他の代替)の「find」コマンドを使用して、同様のことが実現できます。ただし、これにはcygwinをインストールするか、ポータブルバージョンを手元に用意する必要があります。



2

autoITを使用して、システムでこれを実現します。.au3ファイルをコンパイルして簡単に実行できることが気に入っています。誰でも編集できるbatファイルを使用するのと同様に、セキュリティ上の欠陥を導入するのは簡単ではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.