Robocopy:如何將資產從多個位置複製到單個位置並維護日誌
我有多個包含資產的文件夾(每個文件夾都有包含這些資產.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 格式)。問題:
- 此日誌文件儲存在哪裡?為了使這個日誌文件可見,我必須每天編寫一個單獨的命令,如下所示:
robocopy 源目標 /log:D:\ABC\logWed1021.txt /tee /s
- 如何確保每天獲得一份單獨的日誌副本?
- 同樣使用目前命令,日誌文件包含顯示在 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 /F
wmic
@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
。但是,文件名縮進了一些Tab
和Space
字元。下一個程式碼片段應根據需要進行輸出:>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