如何在保留Windows最新文件的同时从目录中删除旧文件

时间:2020-03-05 18:49:43  来源:igfitidea点击:
Possible Duplicate:

  Batch file to delete files older than N days

我想运行一个计划的Windows任务,该任务将从2周之前的目录中删除所有文件。

原因是这些是填满我的服务器的IIS和Tomcat日志,但是我想保留最新的日志,以备需要调查问题时使用。

有谁知道一种简单的方法来做到这一点?

干杯

尼格

解决方案

回答

我们为什么不编写批处理文件或者Powershell脚本并对其进行计划?

用于删除早于指定日期的文件的脚本。

回答

安排一个批处理文件来处理此问题。

此行将删除c:\ mydirectory中早于14天的所有文件():

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

将其放在文本文件中,将其重命名为" deletefiles.bat",然后进行调度。

我还没有测试过,但是应该足够容易尝试。

编辑:如果使用此方法,请确保我们了解正在发生的事情-s标志告诉它递归子目录,而这可能并不是我们想要发生的。另外,我们可能还需要为DEL命令指定一些标志。 :)

编辑:意识到我们需要从Microsoft下载内容,以便FORFILES能够正常工作。我也喜欢公认的解决方案,因为我们不必有任何特殊要求。唯一的问题是,它只会每两周发生一次,而不是每天运行一个流程来删除所有14天以上的事物。为了那是值得的。 :P

回答

如果我们在服务器上安装了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: $!";
}

实际删除的那一行被注释掉了,因为房子里可能有孩子:)

回答

最简单的方法是每周或者每月运行一个.bat运行文件。

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

如果我们想要更复杂的内容,请下载cygwin工具以使用像un * x这样的命令,或者可以考虑使用Powershell。

回答

使用VBScript,改编自ScriptingAnswers

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

回答

确切语法:FILES / p d:\ new / d -30 / m * / c" cmd / c del @file"