我需要创建一个批处理文件,它应该可以在Windows 2003服务器上运行。
我想检查源文件夹中的所有文件修改日期:
注意:因为我的服务器是生产服务器所以,我无法安装资源工具包和robocopy.exe。唯一的方法是编写批处理脚本。
Robocopy
和forfiles
无法在Windows2003服务器中运行。
答案 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/DD
或DD/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.
)
)
)