如何将当前时间超过30分钟的文件从一个文件夹复制到另一个文件夹?
有几个Windows端口用于* nix find
命令可用,提供像-mmin
和-mtime
这样的开关,在这里很有用,可以用-mmin
解决问题。
请注意,Powershell当然是实现这一目标的可行方案。
在普通的DOS中,这里是一个相当有限的批处理脚本,但它足以作为解决问题的基础:
@echo off setlocal enabledelayedexpansion call :GetRefTimestamp -30 for %%f in (*) do ( call :GetFileTimestamp "%%~tf" if "!filetimestamp!" LSS "!reftimestamp!" echo -- %%f is older than 30 minutes if NOT "!filetimestamp!" LSS "!reftimestamp!" echo ++ %%f is NOT older than 30 minutes ) endlocal goto :EOF :GetRefTimestamp ::get current date/time for /f "usebackq tokens=1-5 delims=/:, " %%f in (`echo %DATE:~-10% %TIME: =0%`) do set reftimestamp=%%h%%g%%fT%%i%%j ::apply delta (format [-]HHMM) on time part - not handling over/underflow set /a timedelta=%~1 set timedeltasign= if %timedelta% LSS 0 set timedeltasign=- set timeHHMM=%timestamp:~-4% set /a timeHHMM+=timedelta set /a timeMM=timeHHMM %% 100 if %timeMM% GEQ 60 set /a timeHHMM+=%timedeltasign%40 set timeHHMM=000%timeHHMM% set reftimestamp=%reftimestamp:~0,-4%%timeHHMM:~-4% goto :EOF :GetFileTimestamp ::get file date/time for /f "usebackq tokens=1-5 delims=/:, " %%f in (`echo %~1`) do set filetimestamp=%%h%%g%%fT%%i%%j goto :EOF
只要使用三角洲的常识(知道限制),并避免使用前导零:]
最简单的方法是使用robocopy(或forfiles)
robocopy是win2003 rtk的一部分,默认安装在vista和windows 7上 – > http://www.microsoft.com/downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displaylang=en
FORFILES是Windows 2000 / NT资源工具包的一部分,但在XP / Vista / 7下工作正常 – >(我认为它现在不在微软网站上了)
h_ttp://www.petri.co.il/download_free_reskit_tools.htm