将当前日期与批处理文件中的文件修改日期进

时间:2014-12-30 18:33:24

标签: batch-file

我需要创建一个批处理文件,它应该可以在Windows 2003服务器上运行。

  1. 我有源文件夹" c:\ Source"和目标文件夹" c:\ Destination"。
  2. 我想检查源文件夹中的所有文件修改日期:

    • 如果文件修改日期小于当前日期,则该文件将移至目标文件夹
    • 否则,什么都不做。
  3. 注意:因为我的服务器是生产服务器所以,我无法安装资源工具包和robocopy.exe。唯一的方法是编写批处理脚本。

    Robocopyforfiles无法在Windows2003服务器中运行。

1 个答案:

答案 0 :(得分:2)

更新

由于您的服务器上有forfiles,因此这很容易。要检查超过1天的文件,只需使用forfiles /D -1即可。对于超过2天的文件/D -2

forfiles /D -2 /M *.log /P C:\Source /C "cmd /c move @file c:\Destination"

在控制台窗口中输入forfiles /?以获取完整语法。


原始答案

考虑修改您的要求。而不是说“如果文件修改日期小于当前日期”,您应该说,“如果文件修改日期不等于当前日期”。这使得你不必做日期数学,并使你的任务变得非常简单。毕竟,最后修改日期不会是将来的日期,对吗?

之后,从%date%抓取今天的日期并将其与%%~tX循环中每个文件的for替换属性的日期进行比较是一件简单的事情。在控制台窗口中键入help for,有关此语法的详细信息,请参阅最后两页。

我认为这不会有任何区域设置日期格式问题。只要系统的%date%变量的格式为dayOfWeek Date%%~tX的格式为Date Time etc.,则无论您是否在本地处理日期MM/DD/YYYY,此脚本都应该有效1}}或YYYY/MM/DDDD/MM/YYYY或其他内容。我希望。

@echo off
setlocal enableextensions

set "source=c:\Source"
set "destination=c:\Destination"

:: store today's date in %today%
for /f "tokens=2" %%I in ('echo %date%') do set "today=%%I"

for %%I in ("%source%\*") do (
    rem :: scrape MM/DD/YYYY from %%~tI
    for /f %%a in ('echo %%~tI') do (

        rem :: compare the two dates
        if "%%a" neq "%today%" (
            echo %%~nxI: %%a does not equal %today%.  Moving.
            >NUL move /y "%%~fI" "%destination%"
        ) else (
            echo %%~nxI: %%a equals %today%.  Skipping.
        )
    )
)