@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 具有根据相同公式构造的目标文件名可能会更好(恕我直言,无论如何......)