批处理文件将超过30分钟的文件从一个文件夹复制到另一个文件夹

时间:2010-07-06 10:41:49

标签: windows batch-file cmd

如何将当前时间超过30分钟的文件从一个文件夹复制到另一个文件夹?

2 个答案:

答案 0 :(得分:3)

* nix find命令有几个Windows端口可用,提供-mmin-mtime等开关,这些开关在这里很有用,可以解决问题 - 衬...
请注意,Powershell肯定是achieve this goal的可行替代方案。

在普通的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

只需使用delta的常识(了解限制)并避免使用前导零:]

答案 1 :(得分:1)

最简单的方法是使用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