java 删除n天前的文件_批处理文件以删除超过N天的文件

我正在寻找一种删除批处理文件中所有7天以上的文件的方法。 我在网上搜索,发现了一些包含数百行代码的示例,还有一些示例需要安装额外的命令行实用程序才能完成任务。

只需几行代码即可在BASH中完成类似的操作。 似乎可以对Windows中的批处理文件至少进行一些远程操作。 我正在寻找一种可以在标准Windows命令提示符下运行且没有任何其他实用程序的解决方案。 请不要使用PowerShell或Cygwin。

#1楼

对于Windows Server 2008 R2:

forfiles /P c:\sql_backups\ /S /M *.sql /D -90 /C "cmd /c del @PATH"

这将删除所有超过90天的.sql文件。

#2楼

Ok有点无聊,并提出了这个建议,其中包含我的一个穷人的Linux时代替代版本,该版本仅限于日常使用(无时间限制):

7天清理

@echo off

setlocal ENABLEDELAYEDEXPANSION

set day=86400

set /a year=day*365

set /a strip=day*7

set dSource=C:\temp

call :epoch %date%

set /a slice=epoch-strip

for /f "delims=" %%f in ('dir /a-d-h-s /b /s %dSource%') do (

call :epoch %%~tf

if !epoch! LEQ %slice% (echo DELETE %%f ^(%%~tf^)) ELSE echo keep %%f ^(%%~tf^)

)

exit /b 0

rem Args[1]: Year-Month-Day

:epoch

setlocal ENABLEDELAYEDEXPANSION

for /f "tokens=1,2,3 delims=-" %%d in ('echo %1') do set Years=%%d& set Months=%%e& set Days=%%f

if "!Months:~0,1!"=="0" set Months=!Months:~1,1!

if "!Days:~0,1!"=="0" set Days=!Days:~1,1!

set /a Days=Days*day

set /a _months=0

set i=1&& for %%m in (31 28 31 30 31 30 31 31 30 31 30 31) do if !i! LSS !Months! (set /a _months=!_months! + %%m*day&& set /a i+=1)

set /a Months=!_months!

set /a Years=(Years-1970)*year

set /a Epoch=Years+Months+Days

endlocal& set Epoch=%Epoch%

exit /b 0

用法

set /a strip=day*7 :将7更改为要保留的天数。

set dSource=C:\\temp :这是检查文件的起始目录。

笔记

这是非破坏性的代码,它将显示会发生的情况。

变更:

if !epoch! LEQ %slice% (echo DELETE %%f ^(%%~tf^)) ELSE echo keep %%f ^(%%~tf^)

到这样的东西:

if !epoch! LEQ %slice% del /f %%f

因此实际上删除了文件

2月 :硬编码为28天。 难忘的岁月真是令人难以置信。 如果有人有想法不添加10行代码,请继续发布,以便将其添加到我的代码中。

纪元 :我没有考虑时间,因为需要删除早于某个特定日期的文件,如果花费数小时/分钟,就会从原本打算保留的日期删除文件。

局限性

纪元认为您的短日期格式是YYYY-MM-DD。 需要将其调整为其他设置或运行时评估(读取sShortTime,用户绑定配置,在过滤器中配置适当的字段顺序并使用过滤器从参数中提取正确的数据)。

我是否提到我讨厌该编辑器的自动格式化? 它删除了空白行,并且复制粘贴是一个地狱。

我希望这有帮助。

#3楼

看看我的回答到一个类似的问题 :

REM del_old.bat

REM usage: del_old MM-DD-YYY

for /f "tokens=*" %%a IN ('xcopy *.* /d:%1 /L /I null') do if exist %%~nxa echo %%~nxa >> FILES_TO_KEEP.TXT

for /f "tokens=*" %%a IN ('xcopy *.* /L /I /EXCLUDE:FILES_TO_KEEP.TXT null') do if exist "%%~nxa" del "%%~nxa"

这将删除早于给定日期的文件。 我确定可以将其修改为从当前日期返回7天。

更新:我注意到HerbCSO在上述脚本上有所改进。 我建议改用他的版本 。

#4楼

IMO,JavaScript正在逐渐成为一种通用的脚本标准:它可能在比其他任何脚本语言都更多的产品中可用(在Windows中,可以使用Windows Scripting Host获得)。 我必须清理许多文件夹中的旧文件,因此这是一个JavaScript函数:

// run from an administrator command prompt (or from task scheduler with full rights): wscript jscript.js

// debug with: wscript /d /x jscript.js

var fs = WScript.CreateObject("Scripting.FileSystemObject");

clearFolder('C:\\temp\\cleanup');

function clearFolder(folderPath)

{

// calculate date 3 days ago

var dateNow = new Date();

var dateTest = new Date();

dateTest.setDate(dateNow.getDate() - 3);

var folder = fs.GetFolder(folderPath);

var files = folder.Files;

for( var it = new Enumerator(files); !it.atEnd(); it.moveNext() )

{

var file = it.item();

if( file.DateLastModified < dateTest)

{

var filename = file.name;

var ext = filename.split('.').pop().toLowerCase();

if (ext != 'exe' && ext != 'dll')

{

file.Delete(true);

}

}

}

var subfolders = new Enumerator(folder.SubFolders);

for (; !subfolders.atEnd(); subfolders.moveNext())

{

clearFolder(subfolders.item().Path);

}

}

对于每个要清除的文件夹,只需将另一个调用添加到clearFolder()函数即可。 此特定代码还保留exe和dll文件,并清除子文件夹。

#5楼

这没什么了不起的,但是我今天需要做这样的事情并将其作为计划任务运行,等等。

批处理文件DelFilesOlderThanNDays.bat下面带有示例exec w / params:

DelFilesOlderThanNDays.bat 7 C:\\ dir1 \\ dir2 \\ dir3 \\ logs * .log

echo off

cls

Echo(

SET keepDD=%1

SET logPath=%2 :: example C:\dir1\dir2\dir3\logs

SET logFileExt=%3

SET check=0

IF [%3] EQU [] SET logFileExt=*.log & echo: file extention not specified (default set to "*.log")

IF [%2] EQU [] echo: file directory no specified (a required parameter), exiting! & EXIT /B

IF [%1] EQU [] echo: number of days not specified? :)

echo(

echo: in path [ %logPath% ]

echo: finding all files like [ %logFileExt% ]

echo: older than [ %keepDD% ] days

echo(

::

::

:: LOG

echo: >> c:\trimLogFiles\logBat\log.txt

echo: executed on %DATE% %TIME% >> c:\trimLogFiles\logBat\log.txt

echo: ---------------------------------------------------------- >> c:\trimLogFiles\logBat\log.txt

echo: in path [ %logPath% ] >> c:\trimLogFiles\logBat\log.txt

echo: finding all files like [ %logFileExt% ] >> c:\trimLogFiles\logBat\log.txt

echo: older than [ %keepDD% ] days >> c:\trimLogFiles\logBat\log.txt

echo: ---------------------------------------------------------- >> c:\trimLogFiles\logBat\log.txt

::

FORFILES /p %logPath% /s /m %logFileExt% /d -%keepDD% /c "cmd /c echo @path" >> c:\trimLogFiles\logBat\log.txt 2

IF %ERRORLEVEL% EQU 0 (

FORFILES /p %logPath% /s /m %logFileExt% /d -%keepDD% /c "cmd /c echo @path"

)

::

::

:: LOG

IF %ERRORLEVEL% EQU 0 (

echo: >> c:\trimLogFiles\logBat\log.txt

echo: deleting files ... >> c:\trimLogFiles\logBat\log.txt

echo: >> c:\trimLogFiles\logBat\log.txt

SET check=1

)

::

::

IF %check% EQU 1 (

FORFILES /p %logPath% /s /m %logFileExt% /d -%keepDD% /c "cmd /c del @path"

)

::

:: RETURN & LOG

::

IF %ERRORLEVEL% EQU 0 echo: deletion successfull! & echo: deletion successfull! >> c:\trimLogFiles\logBat\log.txt

echo: ---------------------------------------------------------- >> c:\trimLogFiles\logBat\log.txt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值