我有多个包含资产的文件夹(每个文件夹都有包含这些资产 .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格式)。问题:
- 这个日志文件存储在哪里?为了显示这个日志文件,我必须每天编写一个单独的命令,如下所示:
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
答案1
使用获取YYYYMMDD
独立于语言环境和区域设置的格式化日期for /F
环形反对wmic
(Windows 管理规范命令) 和环境变量子字符串:
@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