批处理文件,用于删除超过N小时或分钟的文件

时间:2015-02-09 12:44:50

标签: batch-file

我看到了这一点 - Batch file to delete files older than N days

但是如何删除超过N小时或分钟的文件?

感谢。

5 个答案:

答案 0 :(得分:5)

即使使用 WSH \ Jscript \ VBscript ,也很难做到这一点(独立于时间日期设置),因为当您请求文件的日期/时间属性时,WSH不会返回日期对象,但是取决于时间设置的字符串(可以使用wmi,但这会达到性能)。 我想你已经安装了.net框架,这使得任务变得更加容易。 Here's一个应该适用于您的情况的混合工具。您可以使用您想要的任何名称保存它。以下是如何使用它(在此示例中称为FileDateFilterJS.bat):

@echo off

for /f "tokens=* delims=" %%# in ('FileDateFilterJS.bat  "." -hh -5') do (
    echo deleting  "%%~f#"
    echo del /q /f "%%~f#"
)

pause

小时数为5 - -hh -5且目录为最新版本 - "."。您可以在echo命令之前移除del

这个剧本花了我更多的时间,而不是我预期的(尽管我已经研究过这个主题,并准备好了一些部分)并且没有经过如此严格的测试,所以可能仍然没有马车。而且我假设可以改进帮助信息和选项。

答案 1 :(得分:3)

这里的解决方案都不适用于我。它们是非常创新的解决方案,第一个(.net / FileTimeFilerJS.bat [sic])实际上对我有用。然而,当我试图在另一个文件夹上调用它时,它只是崩溃了。我尝试了第二个(jscript / FileTimeFilterJs.bat),但它没有成功删除超过一小时的所有文件。

我的解决方案需要可执行文件,但我发现这对我来说是最好的解决方案。

我从GnuWin32下载了FindUtils,并提取了3个文件(你必须下载下面的两个拉链):libintl3.dll,libiconv2.dll和find.exe(它们的大小相差约1MB)。我将find.exe重命名为gnu_find.exe只是为了避免使用Windows FIND命令。

然后,您可以运行漂亮的GNU命令(以下命令适用于环境变量%fldr%指定的文件夹中超过120分钟的所有zip文件):

gnu_find %fldr% -name *[.:]zip -type f -mmin +120 -delete

而不是* .zip,我使用* [。] zip,因为Windows 7+会扩展* .zip,然后才能使用它。

Find Utils bin

Find Utils deps

答案 2 :(得分:1)

Here's另一个脚本只依赖于WSH / JSCRIPT和几乎相同的界面(并且不需要安装.net)。要显示超过5小时的文件,请使用:

 FileTimeFilterJS.bat "." -hh -5 -filetime modified

答案 3 :(得分:0)

@echo off
cd /d "your file path"
:: delete files 3 hours ago. If you want other condition, refer https://www.w3schools.com/asp/func_dateadd.asp
echo wscript.echo dateadd("h",-3,now())>GetOldDate.vbs
for /f "tokens=1,2 delims= " %%i in ('cscript /nologo GetOldDate.vbs') do (
  set d=%%i
  set t=%%j
)
echo "%d%"
echo "%t%"
for /f "tokens=1,2,3 delims=/" %%a in ("%d%") do (
  set y=%%a
  set m=%%b
  set d=%%c
)
for /f "tokens=1,2,3 delims=:" %%a in ("%t%") do (
  set h=%%a
  set mm=%%b
  set s=%%c
)

if %m% LSS 10 set m=0%m%
if %d% LSS 10 set d=0%d%
if %h% LSS 10 set h=0%h%
if %mm% LSS 10 set mm=0%mm%

set OldDate=%y%/%m%/%d% %h%:%mm%
echo "%OldDate%"
del GetOldDate.vbs
for %%a in (*) do ( 
  if "%%~ta" lss "%OldDate%" (
    echo %%a
    echo "%%~ta"
    del %%a
  )
)

答案 4 :(得分:0)

删除文件

@echo off

echo >%temp%\temp.vbs  for each File In CreateObject("Scripting.FileSystemObject").GetFolder("[path_file]").Files
echo >>%temp%\temp.vbs If DateDiff("n",File.DateCreated,Now) ^> 30 Then File.Deletee
echo >>%temp%\temp.vbs next

cscript /nologo %temp%\temp.vbs 

Exit /b

删除文件夹

@echo off

echo >%temp%\temp.vbs  for each Folder In CreateObject("Scripting.FileSystemObject").GetFolder("[Path_folder]").subFolders
echo >>%temp%\temp.vbs If DateDiff("n",Folder.DateCreated,Now) ^> 30 Then Folder.Delete
echo >>%temp%\temp.vbs next

cscript /nologo %temp%\temp.vbs 

Exit /b

要更改时差,我们需要在DateDiff("n",[Folder or File].DateCreated,Now) ^> 30(条件为30分钟)中替换条件。

.DateCreated可以通过以下方式更改:.DateLastAccessed.DateLastModified

时差:"yyyy"年,"m"月,"d"天,"h"小时,"n"分钟,"s"秒。

["Path_file o Path_folder"]必须用于目标文件或文件夹。