5

重複の可能性:
N 日より古いファイルを削除するバッチ ファイル

2 週間以上前のディレクトリからすべてのファイルを削除するスケジュールされた Windows タスクを実行したいと考えています。

その理由は、IIS と Tomcat のログがサーバーをいっぱいにするためですが、問題を調査する必要がある場合に備えて、最新のログを保持したいと考えています。

これを行う簡単な方法を知っている人はいますか?

乾杯

にげ

4

6 に答える 6

6

正確な構文: FORFILES /p d:\new /d -30 /m * /c "cmd /c del @file"

于 2010-09-20T08:18:34.653 に答える
4

ScriptingAnswersから改作された 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 で実行できます

@Jason: 素晴らしいユーティリティ、リソース キットの FORFILES

于 2008-09-08T23:39:23.093 に答える
4

これを処理するバッチ ファイルをスケジュールします。

次の行は、c:\mydirectory 内の 14 日より古いすべてのファイル (*.*) を削除します。

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

それをテキスト ファイルに入れて、「deletefiles.bat」などの名前に変更し、スケジュールします。

私はこれをテストしていませんが、試すのは簡単なはずです。


編集:これを使用する場合は、何が起こっているのかを理解していることを確認してください - -s フラグは、サブディレクトリを再帰するように指示します。また、DEL コマンドにもいくつかのフラグを指定する必要がある場合があります。:)


編集: FORFILES を機能させるには、Microsoft からダウンロードする必要があることに気付きました。特別なものを用意する必要がないので、受け入れられた解決策も気に入っています。唯一の問題は、14 日以上前のものをすべて削除するプロセスを毎日実行するのではなく、2 週間ごとにしか発生しないことです。それが価値があるもののために。:P

于 2008-09-08T23:07:52.623 に答える
4

最も簡単な方法は、.bat 実行ファイルを毎週または毎月実行することです。

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

より複雑なものが必要な場合は、cygwin ツールをダウンロードして un*x のようなコマンドを使用するか、場合によっては Powershell を調べてください。

于 2008-09-08T23:19:30.037 に答える
1

バッチ ファイルまたは PowerShell スクリプトを作成してスケジュールしてみませんか?

指定した日付より古いファイルを削除するためのスクリプト。

于 2008-09-08T23:05:51.303 に答える
1

サーバーに perl (または同様のもの) がインストールされている場合は、かなり簡単です。

#!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: $!";
}

家に子供がいる可能性があるため、実際に削除を行う行はコメントアウトされています:)

于 2008-09-08T23:08:45.803 に答える