2015-09-02 3 views
0

Я бы хотел скопировать файлы между папками. Только изменен (CSV-файлы с новыми записями) в текущий день и за день до этого.Копировать файлы, измененные за последние 2 дня

Вот мой код:

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" 
    } 
} 

Что не так - любые предложения?

+0

возможно дубликат [Powershell скрипт для копирования файлов на основе даты доработанной проверить новейший файл из удаленного местоположения] (http://stackoverflow.com/questions/29421519/powershell-script-to-copy-files -based-on-date-modifed-to-check-newest-file-from) – nimizen

+0

Итак, вы хотели бы скопировать файлы, которые были изменены? Вы не используете '$ file' в строке' Copy-Item'. –

+0

@Mr Дерево, Да только файлы, которые были изменены. –

ответ

3

Необходимо сравнить дату с -gt, иначе вы ищете файлы, которые были скопированы в это время EXACT.

Обратите внимание, что выполнение операции (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" 
    } 
} 

Если вы не хотите, чтобы выписать «Копирование ...» и «Не Копирование ...», то вы могли бы упростить это совсем немного.

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

Наконец, если вы хотите скопировать что-либо с самого начала (например, в полночь в начале) вчера, то измените следующую строку:

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

Просто позвоните в свойство Date, чтобы получить «полночь»: (Get-Date) .AddDays (-1). Дата – nimizen

+0

@Mr Tree and nimizen Спасибо, ответы. Это работает для меня. –

+0

Если это ответит на ваш вопрос, отметьте его как принятый. –

-1

@Mr Дерево У меня есть еще один связанный с этим вопрос ,

У меня есть несколько раз в день новый файл в месте 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" 
    } 
} 
Смежные вопросы