Batch file 将当前日期与批处理文件中的文件修改日期进行比较
我需要创建一个批处理文件,该文件应该在Windows2003Server中工作Batch file 将当前日期与批处理文件中的文件修改日期进行比较,batch-file,Batch File,我需要创建一个批处理文件,该文件应该在Windows2003Server中工作 我有源文件夹“c:\source”和目标文件夹“c:\destination” 我要检查源文件夹中的所有文件修改日期: 如果文件修改日期小于当前日期,则该文件将移动到目标文件夹中 否则,什么也不做 注意:由于我的服务器是生产服务器,因此无法安装Resource kit和robocy.exe。唯一的方法是编写批处理脚本 Robocopy和forfiles在Windows2003服务器中不工作。更新 因为您的服务器上
- 如果文件修改日期小于当前日期,则该文件将移动到目标文件夹中
- 否则,什么也不做
Robocopy
和forfiles
在Windows2003服务器中不工作。更新
因为您的服务器上有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%
中抓取今天的日期,并将其与for
循环中每个文件的%%~tX
替换属性中的日期进行比较。在控制台窗口中键入有关的帮助,并查看最后两页以了解有关此语法的更多信息
我认为这不会有任何区域设置日期格式问题。只要系统的%date%
变量的格式为dayOfWeek-date
,%tX
的格式为date-Time等
,那么无论您在本地处理的日期是MM/DD/yyyyyy
还是yyyyyy/MM/DD
或DD/MM/yyyyyyyyy
还是其他格式,此脚本都应该可以工作。我希望如此
@echo关闭
setLocalEnableExtensions
设置“source=c:\source”
设置“destination=c:\destination”
::将今天的日期存储在%today%中
对于('echo%date%')中的/f“tokens=2”%%I,请设置“today=%%I”
对于%%I in(“%source%\*”)执行以下操作(
rem::从%%~tI刮取MM/DD/YYYY
对于('echo%%~tI')中的/f%%a,请执行以下操作(
比较这两个日期
如果“%%a”neq“%today%”(
echo%%~nxI:%%a不等于%today%。正在移动。
>NUL move/y“%%~fI”“%目的地%”
)否则(
echo%%~nxI:%%a等于%today%。正在跳过。
)
)
)
您的服务器上是否安装了PowerShell?在PowerShell中这样做会简单得多。您不必“安装”资源工具包,只需将robocy.exe复制到服务器并立即开始使用即可。@Kranthi欢迎使用Stack Overflow!如果我的答案是有用的,请考虑将它标记为接受。为了解释为什么这很重要。嗨,Rojo,非常感谢你的帮助,如果我想移动超过2天的文件,LSS不起作用。这是另一个问题。实际上,如果您只需将c:\windows\system32\forfiles.exe
复制到您的2K3服务器上,您将省去很多麻烦。批处理语言对于日期数学来说很糟糕。您可能可以使用JScript解决方案,但可以使用WSH.Echo(Math.floor(age/1000/60/60/24))代码>以天为单位获取年龄。嗨,Rojo,是的,我在c:\windows\System32文件夹中有“Forfiles.exe”,我们可以在这方面做更多吗?嗨,Rojo,我已经尝试过这个命令,它可以正常工作。“forfiles/P”d:\source“/S/M./d-2/C”cmd/C move@file“d:\dest”。非常感谢您的输入。@Kranthi Cool。我在更新我的答案时,您正在做自己的测试,看起来是这样的。:)