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


0

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

robocopy source target /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. 此外,使用current命令,日志文件包含cmd窗口中显示的整个输出。我只是希望它包含资产的名称及其扩展名。

编辑1:使用以下批处理命令,我能够解决与日志文件名格式有关的问题:

@ECHO OFF
for /f %%a in ('wmic os get LocalDateTime ^| findstr ^[0-9]') do (set ts=%%a)
ECHO %ts:~0,8%_%ts:~8,4%
echo robocopy ship shore /log:D:\HAL\log\log_%ts:~0,8%_%ts:~8,4%.txt
robocopy Ship Shore /log:D:\HAL\log\log_%ts:~0,8%_%ts:~8,4%.txt /S

此批处理命令也起作用:

@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 ship shore /log:D:\HAL\log\log_%_date%.txt
robocopy ship shore /log:D:\HAL\log\log_%_date%.txt /S

然而,此处提出的其他问题仍未得到答复。



我不知道在哪里问,所以在这两个地方问这个,因为它很紧急。我会确保不重复这一点。谢谢
Yash Saraiya 2015年

Answers:


1

请不要交叉询问StackExchange同样的问题。已在https://serverfault.com/q/730450/257436回答如下:


获取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.

1

该日志文件存储在何处?为了使这个日志文件可见,我必须每天写一个单独的命令

那是因为你没有删除最后一个echo或添加/s批处理文件。

在我们冗长的聊天中,我昨天解释了这一点。

我也更新了我的答案,告诉你你需要做什么:

  • 如果您对日期格式感到满意,请删除最后一个回音
  • 如果源目录包含需要复制的子目录,请使用/ s。

这是包含这些更改的批处理文件:

@echo off
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do (
set _date=%%a%%b%%c
)
robocopy ship shore /log:%_date%.txt /s

我也在聊天中说:

您还需要更改批处理文件以获取区域设置的正确日期格式。

PC上命令提示符的date / t输出是多少?

我问这个是因为我可以看到批处理文件在你的电脑上有错误的日期格式(但我的正确)。我从来没有对这个问题做出回应(所以日期格式仍然没有固定)。

正如JosefZ在他的回答中正确指出的那样,log_ddmmyy.txt无论您的语言环境如何,都可以使用更好的方法来获取所需的日期格式wmic

随着这些更改,最终批处理文件变为:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=2 delims==" %%G in ('wmic OS get LocalDateTime /value') do (
  set _date=%%G
  set _date=!_date:~0,8!
  )
robocopy ship shore /log:D:\HAL\log_!_date!.txt /s
endlocal

现在,最后一步是修改日志文件格式,因为您希望包含具有扩展名的资产名称:

  • 使用JosefZ答案中描述的开关来做到这一点。

  • 试用开关以获得您想要的确切格式。提示:我认为你需要使用其中的几个开关。


时间格式问题已解决...我希望解决其他问题,例如我当前的日志文件包含使用/ tee在cmd中抛出的完整摘要...我只想记录复制/移动的资产的名称...然后如何从不同位置的多个文件夹中获取资源到一个文件夹
Yash Saraiya 2015年

你需要自己开始学习这个。我的答案的最后一部分告诉您如何更改日志格式。请尝试并更改它,直到获得所需的格式。
DavidPostill

我已经得到了我想要的格式...检查编辑我的问题
Yash Saraiya 2015年

您不需要/tee批处理文件中的**。我们把它放在昨天所以我可以弄清楚你在做什么出了什么问题(因为你没有在你的问题中说你有子目录和需要,所以没有记录日志文件/s
DavidPostill

叹。我不是在谈论日期格式。当我说日志格式时,我指的是日志文件的内容。请参阅其他答案中的开关。例如/NJH/ NJS。您可能需要添加robocopy命令以删除作业标题和摘要。
DavidPostill

0

所以为了让RoboCopy只包含文件文件名就是添加/ NDL / NC / NS / NJH / NJS。

我经常使用它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.