复制过去2天内修改的文件

时间:2015-09-02 07:56:47

标签: windows powershell powershell-v3.0 powershell-v4.0

我想在文件夹之间复制文件。在当天和前一天修改(包含新条目的CSV文件)。

这是我的代码:

foreach ($file in (Get-ChildItem "D:\Shares\WinCAP Data\DAYPROT\OFS-222_2")) {
    if ($file.LastWriteTime = (Get-Date).AddDays(-1)) {
        Copy-Item -Path "D:\Shares\WinCAP Data\DAYPROT\OFS-222_2\*.csv" -Destination "\\Oracle\MP"
        "copying $file"
    } else {
        "not copying $file"
    }
}

有什么不对 - 有什么建议吗?

2 个答案:

答案 0 :(得分:3)

您需要将日期与-gt进行比较,否则您需要查找在该确定时间复制的文件。

请注意,执行(Get-Date).AddDays(-1)完全有效,但会在过去24小时内为您提供任何修改。

$DestingationFolder = "\\Oracle\MP\"
$EarliestModifiedTime = (Get-date).AddDays(-1)
$Files = Get-ChildItem "D:\Shares\WinCAP Data\DAYPROT\OFS-222_2\*.csv" -File
foreach ($File in $Files) {
    if ($File.LastWriteTime -gt $EarliestModifiedTime)
    {
        Copy-Item $File -Destination $DestingationFolder
        Write-Host "Copying $File"
    }
    else 
    {
        Write-Host "Not copying $File"
    }
}

如果你不想写出"复制......"和#34;不复制......"然后你可以简化这一点。

$DestingationFolder = "\\Oracle\MP\"
$EarliestModifiedTime = (Get-date).AddDays(-1) 
Get-ChildItem -File |? { $_.LastWriteTime -gt $EarliestModifiedTime } | Copy-Item -Destination $DestingationFolder

最后,如果您想在昨天(例如,开始时的午夜)开始复制任何内容,请更改以下行:

$EarliestModifiedTime = (Get-date).AddDays(-1).Date

答案 1 :(得分:-1)

@Mr Tree我还有一个相关的问题。

我每天都有几次新文件位于D:\ Shares \ WinCAP Data \ DAYPROT \ OFS-HT(位置1),固定名称为abcDD.MM.YYYY.csv(abc03.09.2015.csv)和我有一个服务,每隔10分钟调用我的powershell脚本。我之前在上面的帖子里做了你的建议。我的目标是:1。检查是否有名为abcDD.MM.YYYY.csv |的新文件2.将其重命名为abcDD.MM.YYYYHT.csv并将其移至“\ Oracle \ MP \ PURO \”(位置2)文件夹,我需要使用现有的当天重写它。

问题是如果文件已存在于位置2上,脚本不想移动它并重写它?谢谢提示。

$DestingationFolder = "\\Oracle\MP\PURO\"
$EarliestModifiedTime = (Get-date).AddDays(-1)

Get-ChildItem "D:\Shares\WinCAP Data\DAYPROT\OFS-HT\*.csv" | ?{!($_.fullname -match "HT\.csv")} | Rename-Item -NewName { $_.Name -replace "\.csv", "HT.csv" }

$Files = Get-ChildItem "D:\Shares\WinCAP Data\DAYPROT\OFS-HT\*.csv" -File

foreach ($File in $Files) {
    if ($File.LastWriteTime -gt $EarliestModifiedTime)
    {
        Move-Item $File -Destination $DestingationFolder
        Write-Host "Moving $File"
    }
    else 
    {
        Write-Host "Not moving $File"
    }
}