让RoboCopy仅复制已完成的文件

时间:2016-01-30 19:57:22

标签: powershell

我的问题是在文件夹中使用robocopy定位正确的文件。

我正在整理一个PowerShell脚本,将文件从一个文件夹复制到另一个文件夹,将其排队以进行FTP上传。我想复制最后几天的文件(它是气象站的温度日志),它在凌晨0:59写入磁盘。问题是日志记录软件还将当前天文件保存在文件夹中,不断写入文件夹。因此,我无法像往常一样使用/ minage / maxage定位特定文件。我不能使用/ minage:1 / maxage:2技巧,因为我需要每天复制昨天的文件,而不是“前天”文件。

我的猜测是我需要定位文件名中的特定日期,但这有点超过我目前的技能水平。

我使用的robocopy命令没有成功robocopy $source .\ /maxage:1 /sec /copy:datsou /s /e

文件名结构为TAAVG1M_YYYYMMDD

更新: 好的,我进一步研究了一下。我可以使用Get-Date -format yyyyMMdd以正确的格式获取今天的日期,我可以通过(Get-Date).adddays(-1)获取昨天的日期。但我无法弄清楚的是如何将命令组合成一个以正确的格式得到昨天的日期。

2 个答案:

答案 0 :(得分:1)

Robocopy是一个很棒的实用程序,但我认为你不需要那种多功能性。您可以使用Get-Item获取所有昨天的文件并执行简单的复制。像这样简单的东西会将源中以昨天的日期结束的所有文件复制到目标文件夹

$yesterdaysDate = (Get-Date).adddays(-1).ToString("yyyyMMdd")
Get-Item  -Filter "*$yesterdaysDate" -Path $source | Copy-Item -Destination $destination

答案 1 :(得分:0)

有几种方法可以将日期作为格式化字符串:

  • DateTime对象的ToString()方法:

    (Get-Date).AddDays(-1).ToString('yyyyMMdd')
    
  • format operator-f):

    '{0:yyyyMMdd}' -f (Get-Date).AddDays(-1)
    
  • 第二次使用您要格式化的日期和参数-Format拨打Get-Date

    Get-Date -Date (Get-Date).AddDays(-1) -Format 'yyyyMMdd'