【问题标题】:Why does robocopy keep copying the same file everytime?为什么 robocopy 每次都复制同一个文件?
【发布时间】:2019-03-20 13:39:58
【问题描述】:

我正在使用以下 Robocopy 命令:

robocopy z:\ c:\Testing\ TestFiles.zip

问题是它一直在复制 * EXTRA File 下列出的一些文件,但该文件已经在目标中。

我只希望 robocopy 复制一个较新版本的文件(创建日期不同)

仅当 TestFiles.zip 的创建日期较新时。

为了解决这个问题,我尝试使用 /xo 表示排除旧文件。没有运气。当我每分钟执行一次脚本时,每次都会发生这种情况。

【问题讨论】:

  • 注意,robocopy不关心创建日期,只关心最后修改日期!
  • 执行robocopy 时,您应该获得有关复制过程的不同信息,例如应用的选项。它向您展示了什么?
  • @Gmork 选项:/DCOPY:DA /COPY:DAT /XO /R:1000000 /W:30
  • 使用相同的选项对我来说一切正常。您是否每分钟在执行 robocopy 之前修改文件?
  • 不,当然不是,有没有办法停止额外的文件和新文件,除非创建日期发生变化?正在使用 robocopy 以某种方式查看日期修改/创建

标签: batch-file robocopy


【解决方案1】:

看来您的问题的解决方案可能在这里 -> How do I compare timestamps of files in a batch script?

如果我们考虑这个问题......我们只想在当前文件的时间戳比旧文件的时间戳新的情况下执行您的代码,所以这是伪代码的样子,您只需将其翻译成批处理代码。

If current file version is newer then other file version (
    robocopy z:\ c:\Testing\ TestFiles.zip
)

【讨论】:

    【解决方案2】:

    我建议的解决方案,在cmets中提到如下:

    for /F "tokens=1 eol=" %%A IN ('dir /O-N /A-D "C:\Testing\TestFiles.zip" 2^>nul') do (
        for /F "tokens=1-3 delims=/" %%B IN ("%%A") do set "dt1=%%D%%C%%B"
    )
    
    for /F "tokens=1 eol=" %%E IN ('dir /O-N /A-D "Z:\TestFiles.zip" 2^>nul') do (
        for /F "tokens=1-3 delims=/" %%F IN ("%%E") do set "dt2=%%H%%G%%F"
    )
    
    if %var1% LSS %var2% (move "Z:\TestingFiles.zip" "C:\Testing")
    

    此代码搜索您想要的文件的最后修改日期并进行比较。如果C:\Testing 中的那个更小,则更多的文件TestingFiles.zip 给它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多