Robocopy:如何将资产从多个位置复制到单个位置并保存日志

我有多个文件夹包含资产(每个文件夹有子文件夹包含这些资产.mp3,.txt,.png等)。 我想将所有这些资产和子文件夹复制到一个位置/文件夹。 我能够成功地运行一个robocopy命令来实现将资源和子文件夹从一个文件夹复制到另一个文件夹:

robocopy源目标/ s

我将每天运行一次调度程序来复制资产。 另外我想将所有复制资产的名称存储在一个日志文件中。 日志文件的名称应该是

log_currentDate.txt

例如,如果今天的date是2015年10月20日…日志文件的名称应该是:

log_20151020.txt

第二天即2015年10月21日,应该是:

log_20151021.txt

此日志文件应包含2015年10月20日,2015年10月21日等所有复制资产的名称。 我创build了一个批处理命令(感谢@DavidPostill)来创build一个日志,如下所示:

@echo off for /f "tokens=1-3 delims=/ " %%a in ('date /t') do ( set _date=%%a%%b%%c ) echo robocopy source target /log:D:\ABC\log%_date%.txt 

这将创build一个名为“logTue2010.txt”(即logdayddmm格式)的日志。 问题:

  1. 这个日志文件在哪里存储? 为了使这个日志文件可见,我必须每天写一个单独的命令,如下所示:

robocopy源目标/log:D:\ABC\logWed1021.txt / tee / s

  1. 我如何确保每天获得一份单独的日志副本?
  2. 同样用当前命令,日志文件包含在cmd窗口上显示的全部输出。 我只是希望它包含扩展名的资产的名称。

编辑:根据@JosefZ我编辑我的batch file,如下所示:

 @echo off for /f "tokens=2 delims==" %%G in ('wmic OS get LocalDateTime /value') do set "_date=%%G" set "_date="%_date:~0,8% echo robocopy source target /log:D:\ABC\log\log_%_date%.txt robocopy source target /log:D:\ABC\log\log_%_date%.txt /S 

我收到以下输出:

 D:\ABC>D:\ABC\copy1.bat robocopy source target /log:D:\ABC\log\log_.txt Log File : D:\ABC\log\log_.txt 

获取YYYYMMDD格式的date独立于语言环境和区域设置使用for /F循环针对wmic ( Windows Management Instrumentation命令 )和环境variables子string :

 @echo off for /f "tokens=2 delims==" %%G in ('wmic OS get LocalDateTime /value') do set "_date=%%G" set "_date=%_date:~0,8%" 

还有更多的robocopy 日志logging选项 :

  /L : List only - don't copy, timestamp or delete any files. /NP : No Progress - don't display % copied. /unicode : Display the status output as Unicode text. # /LOG:file : Output status to LOG file (overwrite existing log). /UNILOG:file : Output status to Unicode Log file (overwrite) /LOG+:file : Output status to LOG file (append to existing log). /UNILOG+:file : Output status to Unicode Log file (append) /TS : Include Source file Time Stamps in the output. /FP : Include Full Pathname of files in the output. /NS : No Size - don't log file sizes. /NC : No Class - don't log file classes. /NFL : No File List - don't log file names. /NDL : No Directory List - don't log directory names. /TEE : Output to console window, as well as the log file. /NJH : No Job Header. /NJS : No Job Summary. 
 robocopy B Bcopy /log:D:\ABC\log\log_%_date%.txt /S /NP /NDL /NJH /NJS /NS /NC 

以上命令(note /NP /NDL /NJH /NJS /NS /NC开关)将压缩robocopy输出中除(完全限定)文件名外的几乎所有文件。 但是,文件名称会缩进一些制表符空格字符。 下一个代码片段应该根据需要输出:

 >D:\ABC\log\log_%_date%.txt ( for /f "tokens=*" %%G in (' robocopy B Bcopy /S /NP /NDL /NJH /NJS /NS /NC ') do echo(%%G ) 

有关>解释,请参阅redirect 。 日志文件存储在指定的文件夹( D:\ABC\log\ ); 为了确保这一点,尝试

 type D:\ABC\log\log_%_date%.txt