批处理文件删除比指定日期旧的文件 [英] batch file to delete files older than a specified date
本文介绍了批处理文件删除比指定日期旧的文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
可能重复:结果
批处理文件删除文件比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转到SET30
如果%毫米%== 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 daysHow 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屋!
查看全文