Robocopy:如何将资产从多个位置复制到一个位置并维护日志

Robocopy:如何将资产从多个位置复制到一个位置并维护日志

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

robocopy 源目标/s

我将每天运行一次调度程序来复制资产。我还想将所有复制资产的名称存储在日志文件中。日志文件的名称应采用以下格式

日志当前日期.txt

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

log_20151020.txt

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

log_20151021.txt

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

@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

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

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

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

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

编辑:按照@JosefZ 的要求,我对批处理文件进行了如下编辑:

@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

答案1

使用获取YYYYMMDD独立于语言环境和区域设置的格式化日期for /F环形反对wmicWindows 管理规范命令) 和环境变量子字符串

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

还有更多robocopy 日志记录选项

            /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 

上述命令(注意/NP /NDL /NJH /NJS /NS /NC开关)将抑制输出中除(全限定)文件名之外的几乎所有内容robocopy。但是,文件名会缩进一些TabSpace字符。下一个代码片段应使输出符合预期:

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

有关>解释,请参阅重定向. 并且日志文件存储在指定文件夹中 ( D:\ABC\log\);为确保这一点,请尝试

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

相关内容