2016-01-30 2 views
1

У меня проблема с правильными файлами с robocopy в папке.Получение RoboCopy для копирования только завершенных файлов

Я собираю сценарий PowerShell для копирования файла из папки в другую папку, чтобы поставить его в очередь на загрузку по FTP. Я хочу скопировать файл последних дней (это журнал температуры с метеостанции), который записывается на диск в 0:59 утра. Проблема в том, что программное обеспечение для ведения журнала также сохраняет текущий файл дней в папке, постоянно записывая на него. Таким образом, я не могу настроить целевой файл/minage/maxage, как обычно. Я не могу использовать/minage: 1/maxage: 2 трюк, так как мне нужно скопировать вчерашний файл, а не файл «позавчера».

Мое предположение: мне нужно настроить таргетинг на определенную дату в имени файла, но это немного мимо моего текущего уровня мастерства.

Команда Robocopy Я использую без успеха robocopy $source .\ /maxage:1 /sec /copy:datsou /s /e

Структура имени файла TAAVG1M_YYYYMMDD

UPDATE: Хорошо, я посмотрел в него немного больше. Я могу получить сегодняшнюю дату в правильном формате с Get-Date -format yyyyMMdd, и я могу получить вчерашнюю дату с (Get-Date).adddays(-1). Но я не могу понять, как объединить команды в один, который получит мне вчера дату в правильном формате.

+0

Является ли это только один файл? Или, возможно, все файлы имеют тот же суффикс даты. Вы можете просто использовать логику get-date с помощью Get-Item? – Matt

+0

Да, это один файл в день, который я пытаюсь получить. – Stuggi

ответ

1

Robocopy - отличная утилита, но я не думаю, что вам нужна эта универсальность для примера, который вы даете. Вы можете просто использовать Get-Item, чтобы получить все вчерашние файлы и сделать простую копию. Что-то простое, как это будет копировать все файлы в исходном коде, которые заканчиваются с датой вчерашней в папку назначения

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

Отлично, это именно то, что мне нужно, за исключением того, что я не могу заставить его работать, PS жалуется, что Copy-Item не принимает вход конвейера? – Stuggi

+0

Вот полный скрипт: '$ yesterdaysDate = (Get-Date) .adddays (-1) .ToString (" yyyyMMdd ") $ source =" C: \ Observations \ TimeSeries \ H_TAAVG1M \ 2016 \ " $ destination = "C: \ FTP \" Get-Item -Filter "* $ yesterdaysDate" -Path $ source | Copy-Item $ destination' – Stuggi

+0

Okey, я получил часть Get-Item (необходимо добавить .txt после $ yesterdaysDate, глупо меня). Но Copy-Item все еще жалуется, я получаю эту ошибку: 'CategoryInfo: InvalidArgument (C: \ Observations ... 1M_20160130.txt: PSObject) [Copy-Item], ParameterBindingException' – Stuggi

0

Есть несколько способов, чтобы получить дату в виде отформатированной строки:

  • DateTime объекта, ToString() метод:

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

    '{0:yyyyMMdd}' -f (Get-Date).AddDays(-1) 
    
  • Вызов Get-Date второй раз с датой вы хотите форматировать и параметра -Format:

    Get-Date -Date (Get-Date).AddDays(-1) -Format 'yyyyMMdd' 
    
Смежные вопросы