Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 将当前日期与批处理文件中的文件修改日期进行比较_Batch File - Fatal编程技术网

Batch file 将当前日期与批处理文件中的文件修改日期进行比较

Batch file 将当前日期与批处理文件中的文件修改日期进行比较,batch-file,Batch File,我需要创建一个批处理文件,该文件应该在Windows2003Server中工作 我有源文件夹“c:\source”和目标文件夹“c:\destination” 我要检查源文件夹中的所有文件修改日期: 如果文件修改日期小于当前日期,则该文件将移动到目标文件夹中 否则,什么也不做 注意:由于我的服务器是生产服务器,因此无法安装Resource kit和robocy.exe。唯一的方法是编写批处理脚本 Robocopy和forfiles在Windows2003服务器中不工作。更新 因为您的服务器上

我需要创建一个批处理文件,该文件应该在Windows2003Server中工作

  • 我有源文件夹“c:\source”和目标文件夹“c:\destination”
  • 我要检查源文件夹中的所有文件修改日期:

    • 如果文件修改日期小于当前日期,则该文件将移动到目标文件夹中
    • 否则,什么也不做
  • 注意:由于我的服务器是生产服务器,因此无法安装Resource kit和robocy.exe。唯一的方法是编写批处理脚本

    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。我在更新我的答案时,您正在做自己的测试,看起来是这样的。:)