Batch file 批处理文件机器人复制

Batch file 批处理文件机器人复制,batch-file,robocopy,Batch File,Robocopy,我正在尝试将文件从驱动器c自动复制到驱动器d,我编写了一个批处理代码,并将其安排在任务调度器中运行。我的问题是每次批处理都会将现有文件写入驱动器d。是否可以保留旧文件并使用当前日期自动命名新文件。例如,当批处理运行c:\test中的文件.xlsx时,它将作为文件13012014.xlsx复制到d:\test @回音 机器人副本C:\Test D:\Test\file.xlsx/S/B/ZB/R:4/A-:H/W:10/tee/LOG:“D:\logtest1.txt” 先谢谢你 @echo of

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

@回音 机器人副本C:\Test D:\Test\file.xlsx/S/B/ZB/R:4/A-:H/W:10/tee/LOG:“D:\logtest1.txt”

先谢谢你

@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个字符。这将适用于
2014年1月14日星期三
格式生成14012014

你的日期格式是什么-你需要告诉我们那是什么。你需要意识到有可能用空格代替前导零,这是一个额外的复杂问题

echo %date%
将显示日期。从中选择子字符串。如果使用前导零抑制,则可能需要使用伪变量

set "dummy=%date: =0"
echo %dummy%
您可能需要以更复杂的方式处理日期-这取决于日期格式

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

关于批量处理日期的文章有数百篇,您可以参考


Argh.我明白了。
robocopy
是面向批量复制的,因此似乎不包括重命名目标文件(我也不喜欢说
U:
是指
U:\
作为源目录-
U:
在我看来可能是指
U:.

无论如何,这里有一个可能性:

@ECHO关闭
SETLOCAL
设置“sourcedir=U:”
设置“destdir=U:\destdir”
设置“sourcefile=firelast.xtx”
设置“logfile=u:\logtest1.txt”
机器人副本“%sourcedir%”%destdir%\%date:~0,2%%日期:~3,2%%日期:~6,4%“”%sourcefile%“/B/ZB/R:4/A-:H/W:10/tee/LOG:%logfile%”
移动“%destdir%\%date:~0,2%%日期:~3,2%%日期:~6,4%\%sourcefile%”“%destdir%\%date:~0,2%%日期:~3,2%%日期:~6,4%.xlsx”
RD“%destdir%\%日期:~0,2%%日期:~3,2%%日期:~6,4%
后藤:EOF
您需要更改
sourcedir
等的设置以适应您的环境。我使用的设置适合我的系统

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

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

从本质上讲,这将在目标naed(日期)处创建一个新的子目录,然后
将文件移动到目标目录中的新名称,并对生成的(日期)目录进行删除


如果您不需要所有的日志记录,那么根据相同的公式构造目标文件名的简单
副本
可能会更好(无论如何,IMHO…)

嗨,Magoo先生,举个例子,我希望保存的文件名为filename1301214.xlsx,而不是您显示的文件名为filename.xlsx。您显示的是将日志保存为xlsx,但我不希望日志,我只希望文件保存在文件末尾的日期,这样它就不会覆盖驱动器d上的现有文件。嗨,Magoo先生,上面的代码创建我不知道发生了什么事。正如我不止一次指出的那样,
%date%
的处理取决于您的日期格式。我不知道您的日期格式是什么,但我认为它是
2015年1月13日星期二
。在这种情况下,您需要将日期从
%date:~0,2%更改日期:~3,2%%日期:~6,4%
%date:~7,2%%日期:~4,2%%日期:~10,4%
,无论它出现在哪里。