【问题标题】:Batch file Robocopy批处理文件 Robocopy
【发布时间】:2015-01-13 16:18:24
【问题描述】:

我正在尝试自动将文件从驱动器 c: 复制到驱动器 d,我通过编写批处理代码并将其安排在任务调度程序中运行来做到这一点。我的问题是每次我的批处理运行它时都会覆盖驱动器 d 中的现有文件。是否可以保留旧文件并使用当前日期自动命名新文件。例如,当批处理运行时,c:\test 中的 file.xlsx 将作为 file13012014.xlsx 复制到 d:\test。

@echo 关闭 robocopy C:\Test D:\test\ file.xlsx /S /B /ZB /R:4 /A-:H /W:10 /tee /LOG:"d:\logtest1.txt"

提前谢谢你。

【问题讨论】:

    标签: batch-file robocopy


    【解决方案1】:
    @echo off robocopy C:\Test D:\test\ file.xlsx /S /B /ZB /R:4 /A-:H /W:10 /tee /LOG:"d:\%date:~7,2%%date:~4,2%%date:~10,4%.xlsx"
    

    可以为你工作。这在很大程度上取决于您的日期格式。

    %date:~7,2% 的意思是“例如,从第 7 个字符(从“字符 0”开始计数)获取 2 个字符的日期字符串。这适用于产生 14012014 的 Wed 01/14/2014 格式。

    你的日期格式是什么 - 你需要告诉我们那是什么。而且您需要注意,可以用空格代替前导零,这是一个额外的复杂因素。

    echo %date%
    

    会显示日期。从那里选择您的子字符串。如果您使用前导零抑制,您可能需要使用虚拟变量。

    set "dummy=%date: =0"
    echo %dummy%
    

    您可能需要以更复杂的方式处理日期 - 这一切都取决于日期格式。

    谈到格式,您可能更喜欢将文件名生成为yyyymmdd.xlsx,因为这样就没有歧义(是 ddmmyy 还是 mmddyy - 本地约定有所不同),这意味着名称上的字母排序是按时间顺序排序的名字。

    SO上有数百篇关于批量处理日期的文章可以参考。


    啊。我懂了。 robocopy 面向批量复制,因此 rename-destination-file 似乎不包括在内(我也不喜欢说 U: 意味着 U:\ 作为源目录 - U: 在我看来应该是指U:.)

    无论如何,这是一种可能性:

    @ECHO Off
    SETLOCAL
    SET "sourcedir=U:"
    SET "destdir=U:\destdir"
    SET "sourcefile=firelast.xtx"
    SET "logfile=u:\logtest1.txt"
    
    robocopy "%sourcedir%" "%destdir%\%date:~0,2%%date:~3,2%%date:~6,4%" "%sourcefile%" /B /ZB /R:4 /A-:H /W:10 /tee /LOG:"%logfile%"
    MOVE "%destdir%\%date:~0,2%%date:~3,2%%date:~6,4%\%sourcefile%" "%destdir%\%date:~0,2%%date:~3,2%%date:~6,4%.xlsx"
    RD "%destdir%\%date:~0,2%%date:~3,2%%date:~6,4%"
    
    
    GOTO :EOF
    

    您需要更改sourcedir 等的设置以适应您的情况。我使用了适合我的系统的设置。

    我也只使用普通的dd/mm/yyyy 作为我的日期格式,因此我的子字符串设置可能与你的不同。

    我已经从robocopy 选项中删除了/s,因为它在这里似乎没有任何作用。

    本质上,这会在目标 naed(日期)处创建一个新子目录,然后将 moves 文件更改为目标目录中的新名称,并删除生成的(日期)目录。

    如果您不想要所有的日志记录,那么一个简单的copy 具有根据相同公式构造的目标文件名可能会更好(恕我直言,无论如何......)

    【讨论】:

    • 嗨 Magoo 先生,举个例子,我希望将保存的文件保存为 filename13012014.xlsx 而不仅仅是 filename.xlsx 您显示的是将日志保存为 xlsx,但我不想要日志 i只希望文件以文件末尾的日期保存,这样它就不会覆盖驱动器 d 上的现有文件。
    • 你好 Magoo 先生,上面的代码创建了这个路径,文件夹是空的 D:\Tu 0\13。我不知道发生了什么。
    • 正如我不止一次指出的,%date% 的处理取决于 YOUR 日期格式。我不知道 YOUR 日期格式是什么,但我得出的结论是Tue 01/13/2015。在这种情况下,您需要将日期体操从 %date:~0,2%%date:~3,2%%date:~6,4% 更改为 %date:~7,2%%date:~4,2%%date:~10,4%,无论它出现在哪里。
    猜你喜欢
    • 2018-04-13
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 2017-01-31
    • 1970-01-01
    相关资源
    最近更新 更多