使用Filename + Robocopy日志记录中的当前日期创建文件

时间:2016-12-19 16:35:50

标签: windows batch-file cmd robocopy

对Batchfiles,脚本编写和一般“编码”的经验很少,我很快遇到了我想要创建的批处理的问题。

情况如下:

我有一个文件夹,其中自动插入* .txt文件,我想根据文件的名称将这些文件移动到不同的文件夹。我用Robocopy做了这个,它工作得很好。然后我发现了记录Robocopy所做事情的可能性。 批处理目前看起来像这样:

robocopy C:\Source C:\Target_Normal file*.txt /xf file022*.txt /mov /log+:LogNo.txt /ns /nc /np /r:1 /w:5
robocopy C:\Source C:\Target_Special file022*.txt /mov /log+:LogNo.txt /ns /nc /np /r:1 /w:3

此批处理必须是Windows计划任务的一部分,必须运行每分钟。因为有很多文件需要移动,所以日志文件很快就会变得非常臃肿。我现在每天都需要一个日志文件,相同的批次会在新的一天第一次自动创建。如果新创建的Logfile的名称包含它创建的日期,那将是完美的。我想把所有这些都放在robocopy线上面。 在伪代码中,我想要这样的东西:

If currentDay has no Logfile yet -> 
  Create Logfile with Name Log+currentDate  -> 
else (nothing and continue?)

......如果这有道理的话。我只是不知道如何表达批量工作。

1 个答案:

答案 0 :(得分:1)

此批次演示了如何使用wmi获取实际日期,并将ISO日期时间拆分为您可以根据自己的喜好进行组合的部分。

@Echo off
SetLocal EnableExtensions EnableDelayedExpansion
:: Get Local date time 
for /f "tokens=1-3 delims=.+-" %%A in (
  'wmic os get LocalDateTime^|findstr ^^[0-9]'
    ) do Set _DT=%%A
Set "_yy=%_DT:~0,4%" & Set "_MM=%_DT:~4,2%"  & Set "_dd=%_DT:~6,2%"
Set "_hh=%_DT:~8,2%" & Set "_nn=%_DT:~10,2%" & Set "_ss=%_DT:~12,2%"
:: Put your date time elements together
::            %_DT:~0,8%  is yyyyMMdd
Set LogNo=Log_%_DT:~0,8%.txt
set _

Echo Logfile is : %LogNo%
Pause

robocopy C:\Source C:\Target_Normal file*.txt /xf file022*.txt /mov /log+:%LogNo% /ns /nc /np /r:1 /w:5
robocopy C:\Source C:\Target_Special              file022*.txt /mov /log+:%LogNo% /ns /nc /np /r:1 /w:3
相关问题