批处理文件删除比指定日期旧的文件 [英] batch file to delete files older than a specified date

查看:337
本文介绍了批处理文件删除比指定日期旧的文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


  

可能重复:结果
  批处理文件删除文件比N天年长


我如何创建一个批处理文件来删除比指定日期之前的文件?

这似乎不工作;

  :: -------- ---------- DELOLD.BAT
关闭@echo
SET OLDERTHAN =%1
如果没有定义OLDERTHAN GOTO语法:FOR / F令牌= 2%% i的('日期/ T')不thedate =设定%%我
类型1%
暂停
设置毫米=%thedate:0,2〜%
thedate设置DD =%:〜3,2%
集YYYY =%thedate:〜6,4%集/ A DD =%DD% - %OLDERTHAN%
集/ A毫米=%毫米%+ 0如果/ I%DD%GTR 0转到DONE
集/ A毫米=%毫米% - 1
如果/ I%毫米%GTR 0转到ADJUSTDAY
集/ A毫米= 12
集/ A YYYY =%YYYY% - 1:ADJUSTDAY
如果%毫米%== 1页转到SET31
如果%毫米%== 2转到LEAPCHK
如果%毫米%== 3转到SET31
如果%毫米%== 4转到SET30
如果%毫米%== 5转到SET31
如果%毫米%== 6转到SET30
如果%毫米%== 7转到SET31
如果%毫米%== 8:转到SET31
如果%毫米%== 9转到SE​​T30
如果%毫米%== 10转到SET31
如果%毫米%== 11页转到SET30
如果%毫米%== 12页转到SET31转到ERROR:SET31
集/ A DD = 31 +%DD%
转到DONE:SET30
集/ A DD = 30 +%DD%
转到DONE:LEAPCHK
集/ A TT =%YYYY%%% 4
如果没有%TT%== 0转到SET28
集/ A TT =%YYYY%%% 100
如果没有%TT%== 0转到SET29
集/ A TT =%YYYY%%% 400
如果%TT%== 0转到SET29:SET28
集/ A DD = 28 +%DD%
转到DONE:SET29
集/ A DD = 29 +%DD%:DONE
IF / DD%LSS%10集DD = 0%DD%
如果/ I%毫米%LSS 10集毫米= 0%毫米%
对于%% i的(*。*)做(
设置文件名= %%我
拨打:PROCESSFILE %%〜TI
)集毫米=
集YYYY =
设置DD =
设置thedate =
转到EXIT:句法
回声。
ECHO用法:
ECHO DELOLD点¯x
ECHO当X为天previous到今天的数目。
回声。
ECHO EX:DELOLD 5删除超过5天的文件。
GOTO EXIT:PROCESSFILE
SET TEMP =%1
设置fyyyy = 20%温度:〜6%
设置FMM =%温度:0.2〜%
设置FDD =%温度:〜3,2%
如果/ I%fyyyy%GTR 2069套fyyyy = 19%,温度:〜6%
:: ***************************************
:: *这是文件被删除*
:: *更改echo命令DEL为*
:: *删除。 ECHO用于测试。 *
:: ***************************************
如果/ I%YYYY%/%毫米%/ DD%GEQ%%fyyyy%/%FMM%/ FDD%%(
ECHO%FILENAME%
)SET TEMP =
设置fyyyy =
设置FMM =
设置FDD =:出口:: ---------- END-DELOLD.BAT -------------


解决方案

我用这个脚本:

  ////////////////////////////////////// //////////////////
//删除文件旧于天数
//在当前目录
////////////////////////////////////////////////// //////
//用法:WScript的DeleteOlderThan.js [#Days]
//默认情况下,删除文件超过30天
////////////////////////////////////////////////// //////功能removeDays(日期,nDays)
{
    VAR dateRet =日期
    返回dateRet.setDate(date.getDate() - nDays);
}功能addSlash(strPath中)
{
    变种C = strPath.substr(-1,1);
    如果(C =='\\\\'和;!和C =='/'!)
    {
    strPath的+ ='\\\\';
    }
    返回strPath的;
}//读取参数
变种nDays = WScript.Arguments(0)|| 30;//创建系统对象
变种FS = WScript.CreateObject(Scripting.FileSystemObject的);
VAR壳= WScript.CreateObject(WScript.Shell);//获得当前目录
VAR strDirectoryPath = addSlash(shell.CurrentDirectory);//计算日期
VAR dateNow =新的日期();
VAR dateTest = removeDays(dateNow,nDays);//迭代上的文件
VAR文件夹= fs.GetFolder(strDirectoryPath);
var中的文件= folder.Files;对于(VAR是=新统计员(文件);!it.atEnd(); it.moveNext())
{
    var文件= it.item();    如果(file.DateLastModified< dateTest)
    {
        file.Delete(真);
    }
}

这是我每天调用与

  WScript的C:\\ Program Files文件\\ utils的\\ DeletesOlderThan.js30

Possible Duplicate:
Batch file to delete files older than N days

How do I create a batch file to delete files older than a specified date?

This does not seem to work;

:: --------DELOLD.BAT----------
@echo off
SET OLDERTHAN=%1
IF NOT DEFINED OLDERTHAN GOTO SYNTAX

for /f "tokens=2" %%i in ('date /t') do set thedate=%%i
type %1
pause
set mm=%thedate:~0,2%
set dd=%thedate:~3,2%
set yyyy=%thedate:~6,4%

set /A dd=%dd% - %OLDERTHAN%
set /A mm=%mm% + 0

if /I %dd% GTR 0 goto DONE
set /A mm=%mm% - 1
if /I %mm% GTR 0 goto ADJUSTDAY
set /A mm=12
set /A yyyy=%yyyy% - 1

:ADJUSTDAY
if %mm%==1 goto SET31
if %mm%==2 goto LEAPCHK
if %mm%==3 goto SET31
if %mm%==4 goto SET30
if %mm%==5 goto SET31
if %mm%==6 goto SET30
if %mm%==7 goto SET31
if %mm%==8 goto SET31
if %mm%==9 goto SET30
if %mm%==10 goto SET31
if %mm%==11 goto SET30
if %mm%==12 goto SET31

goto ERROR

:SET31
set /A dd=31 + %dd%
goto DONE

:SET30
set /A dd=30 + %dd%
goto DONE

:LEAPCHK
set /A tt=%yyyy% %% 4
if not %tt%==0 goto SET28
set /A tt=%yyyy% %% 100
if not %tt%==0 goto SET29
set /A tt=%yyyy% %% 400
if %tt%==0 goto SET29

:SET28
set /A dd=28 + %dd%
goto DONE

:SET29
set /A dd=29 + %dd%

:DONE
if /i %dd% LSS 10 set dd=0%dd%
if /I %mm% LSS 10 set mm=0%mm%
for %%i in (*.*) do (
set FileName=%%i
call :PROCESSFILE %%~ti
)

set mm=
set yyyy=
set dd=
set thedate=
goto EXIT

:SYNTAX
ECHO.
ECHO USAGE:
ECHO DELOLD X
ECHO   Where X is the number of days previous to Today.
ECHO.
ECHO EX: "DELOLD 5" Deletes files older than 5 days.
GOTO EXIT

:PROCESSFILE
set temp=%1
set fyyyy=20%temp:~6%
set fmm=%temp:~0,2%
set fdd=%temp:~3,2%
if /I %fyyyy% GTR 2069 set fyyyy=19%temp:~6%


:: ***************************************
:: * This is where the files are deleted *
:: * Change the ECHO command to DEL to   *
:: * delete. ECHO is used for test.      *
:: ***************************************
if /I %yyyy%/%mm%/%dd% GEQ %fyyyy%/%fmm%/%fdd% (
ECHO %FileName%
)

set temp=
set fyyyy=
set fmm=
set fdd=

:EXIT

:: ----------END-DELOLD.BAT-------------

解决方案

I use this script:

////////////////////////////////////////////////////////
// Deletes file older than a number of days 
// in the current directory
////////////////////////////////////////////////////////
// Usage: wscript DeleteOlderThan.js [#Days]
// By default, remove files older than 30 days
////////////////////////////////////////////////////////

function removeDays(date, nDays)
{
    var dateRet = date
    return dateRet.setDate(date.getDate() - nDays);
}

function addSlash(strPath)
{
    var c = strPath.substr(-1, 1);
    if( c !== '\\' && c !== '/' )
    {
    	strPath += '\\';
    }
    return strPath;
}

// Read arguments
var nDays = WScript.Arguments(0) || 30;

// Create system objects
var fs = WScript.CreateObject("Scripting.FileSystemObject");
var shell = WScript.CreateObject("WScript.Shell");

// Retrieve current directory
var strDirectoryPath = addSlash(shell.CurrentDirectory);

// Compute date
var dateNow = new Date();
var dateTest = removeDays(dateNow, nDays);

// Iterate on files
var folder = fs.GetFolder(strDirectoryPath);
var files = folder.Files;

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

    if( file.DateLastModified < dateTest)
    {
        file.Delete(true);
    }
}

which I invoke every day with:

wscript "C:\Program Files\Utils\DeletesOlderThan.js" 30

这篇关于批处理文件删除比指定日期旧的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆