Есть мини скрипт по тасканию файлов туда-сюда раз в N времени.
# Копирование файлов из папки bl для дальнейшей синхронизации
# Принцип работы:
# Из целевой папки берутся файлы по шаблону.
# Так как файлов много с разными названиями - берётся по маске даты, времени и общих символов.
# Это позволит при добавлении файлов с иным началом копировать их без вмешательства в скрипт.
# После собираются данные о количестве файлов в источнике и целевой папке в отдельный файл.
#
# Папка откуда копируются файлы
$copyFrom = "E:\bl\"
# Папка куда скопировать файлы
$copyTo = "\\bl_x\c\bl\" + (Get-Date -format yyyy-MM-dd-HH-mm)
# Сохраняем время для создания отчёта сейчас
# Так как копирование происходит с задержкой- нужно сохранить время заранее. Оно используется в маске поиска.
$mask = "*" + (Get-Date -format yyyy-MM-dd-HH-mm) + "*"
# Собираем шаблон удаляемого каталога N дней назад.
# Для изменения нужно заменить числов в AddDays(-1). Сейчас хранится 1 день.
#$delFolder = $copyTo + (Get-Date).AddDays(-1).ToString('yyyy-MM-dd-HH-mm')
# Файлы создаются с 8:00 до 23:00
# Проверяем время что бы не делать лишних пустых папок
# Время больше 7 часов
if ((Get-Date).Hour -gt 7)
{
# Время меньше 23 часов
if ((Get-Date).Hour -le 23)
{
# Создаём папку для новых файлов с датой и временем
New-Item -Path $copyTo -ItemType Directory
# Собираем шаблон названия файла
# Любое начало + _log_
# + Год
# + Месяц
# + День
# + час + любые символы
$file = $copyFrom + "*_log_" + (Get-Date -format yyyy-MM-dd-HH-mm) + "*"
# Ждём некоторое время, что бы все файлы успели создаться.
sleep -s 300
# Копирование файлов в целевую папку.
Copy-Item -Path $file -Destination $copyTo
# Удаление устаревших файлов
#Remove-Item -Path $delFolder -Recurse
}
else
{
# Время 23 часа, но меньше 15 минут. Последние файлв в 23:00
if (((Get-Date).Hour -eq 23) -and ((Get-Date).Minute -lt 15))
{
New-Item -Path $copyTo -ItemType Directory
$file = $copyFrom + "*_log_" + (Get-Date -format yyyy-MM-dd-HH-mm) + "*"
sleep -s 300
Copy-Item -Path $file -Destination $copyTo
#Remove-Item -Path $delFolder -Recurse
}
}
}
sleep -s 30
# Создание отчёта о скопированных файлах.
# Считаем количество переданых файлов
$fileInGWD = (Get-ChildItem $copyTo -Filter $mask).Count
# Считаем количество исходных файлов
$fileInMistral2 = (Get-ChildItem $copyFrom -Filter $mask).Count
# Создание отчёта о переданых файлах
$report = (Get-Date -format yyyy-MM-dd-HH-mm) + ": Передано " + $fileInGWD + " из " + $fileInMistral2 + " файлов."
# Указываем путь до файла с отчётами
$reportFile = "\\bl_x\c\bl\" + (Get-Date -format yyyy-MM-dd) + ".txt"
# Передаём отчёт в файл
$report | out-file -filepath $reportFile -append -width 200
По каким-то причинам в период работы скрипта (If отрабатывает) "$report | out-file -filepath $reportFile -append -width 200" оставляет 2 записи: одну когда ещё не все передалось, вторую когда всё передалось. Когда if не отрабатывает - всего одну.
Что я хочу: я хочу всегда 1 запись. Кто знает в чём причина и куда копать?