Windows-7

Robocopy:如何將資產從多個位置複製到單個位置並維護日誌

  • August 6, 2016

我有多個包含資產的文件夾(每個文件夾都有包含這些資產.mp3、.txt、.png 等的子文件夾)。我想將所有這些資產與子文件夾一起復製到一個位置/文件夾。我能夠成功執行 robocopy 命令來實現將資產以及子文件夾從一個文件夾複製到另一個文件夾:

robocopy 源目標 /s

我將每天執行一次調度程序來複製資產。我還想將所有複製資產的名稱儲存在日誌文件中。日誌文件的名稱應為

log_currentDate.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

使用針對(Windows Management Instrumentation 命令)和環境變數子字元串的循環獲取YYYYMMDD獨立於語言環境和區域設置的格式化日期:for /Fwmic

@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

引用自:https://serverfault.com/questions/730450