PowerShell - Копирование файлов по дате
-
nse
PowerShell - Копирование файлов по дате
Уважаемые форумчане! подскажите пожалуйста, есть ли возможность через power shell сделать следующее
Есть папка1 с множеством файлов *.7z (ежедневные бэкапы)
Как скопировать файлы первого числа каждого месяца в папку2
Условием отбора должна служить дата ИЗМЕНЕНИЯ файлов
Есть папка1 с множеством файлов *.7z (ежедневные бэкапы)
Как скопировать файлы первого числа каждого месяца в папку2
Условием отбора должна служить дата ИЗМЕНЕНИЯ файлов
-
Iska
Re: PowerShell - Копирование файлов по дате
nse, в принципе, можно, но удобнее такие вещи делать а) на WSH/PowerShell, б) не «сейчас», а в момент создания самого архива.
-
megaloman
Re: PowerShell - Копирование файлов по дате
В принципе можно и CMD
Решаю задачу: Если за день создаётся несколько файлов бэкапов с разными именами, копирую все файлы, самые старые по дате изменения в каждом месяце. Если самая старая дата изменения файлов в месяце не 01, а например, 05, будут скопированы файлы за 05 число
[spoiler]Код: [/spoiler]
Если скрипт предполагается выполнять многократно, то, чтобы избежать повторного копирования, перед Copy лучше поставить проверку на существование файла в выходной папке
Код:
Примечание: отображение месяца и года в системе должны быть мм гггг
Решаю задачу: Если за день создаётся несколько файлов бэкапов с разными именами, копирую все файлы, самые старые по дате изменения в каждом месяце. Если самая старая дата изменения файлов в месяце не 01, а например, 05, будут скопированы файлы за 05 число
[spoiler]Код: [/spoiler]
Код: Выделить всё
@Echo Off
Set "BoxIn=D:\CMD_Forum"
Set "MaskIn=*.7z"
Set "BoxOut=Z:\Box_Out"
Pushd "%BoxIn%"
Set "FMes= "
Set "FDay= "
FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%MaskIn%" /B /A:-D /O:D /T:W`) DO Call :CopyFirst "%%f" %%~tf
Popd
GoTo :Eof
:CopyFirst
Set "Mes=%2"
Set "Mes=%Mes:~-7%"
If Not "%Fmes%"=="%Mes%" (
Set "FDay=%2"
Set "FMes=%Mes%"
)
If "%FDay%"=="%2" If Not Exist "%BoxOut%\%~1" Echo %1 &Copy %1 "%BoxOut%\" >nul
GoTo :EofЕсли скрипт предполагается выполнять многократно, то, чтобы избежать повторного копирования, перед Copy лучше поставить проверку на существование файла в выходной папке
Код:
Код: Выделить всё
rem Copy %1 "%BoxOut%\" >nul
If Not Exist "%BoxOut%\%~1" Echo %1 &Copy %1 "%BoxOut%\" >nulПримечание: отображение месяца и года в системе должны быть мм гггг
-
Iska
Re: PowerShell - Копирование файлов по дате
Цитата nse:
Условием отбора должна служить дата ИЗМЕНЕНИЯ файлов
Это можно. Вопрос только в том, какие именно файлы отбирать? Вчерашние, за месяц, за год, до какого числа и т.д. ...
Скопировать, думаю проблем не составит... загвоздка в отборе?
Например, отбор файлов с датой изменения не позднее, чем год назад от текущей даты:
Код:
Условием отбора должна служить дата ИЗМЕНЕНИЯ файлов
PowerShell - Копирование файлов по дате
Это можно. Вопрос только в том, какие именно файлы отбирать? Вчерашние, за месяц, за год, до какого числа и т.д. ...
Скопировать, думаю проблем не составит... загвоздка в отборе?
Например, отбор файлов с датой изменения не позднее, чем год назад от текущей даты:
Код:
Код: Выделить всё
$src = 'папка1'
$dst = 'папка2'
if (!(test-path $src) -or !(test-path $dst)){
write-host 'Проверьте существование каталогов'
sleep 5
exit
}
dir "$src\*" -incl '*.7z' -file|?{$_.lastwritetime -lt (get-date).addyears('-1')}-
YuS_2
Re: PowerShell - Копирование файлов по дате
Код:
YuS_2, не стоит так "обрабатывать ошибки"
во-первых они стали менее информативны;
во вторых для вывода ошибок предназначен поток ошибок;
в третьих, если этот фрагмент начать использовать в групповых операциях, то при ошибке (переименовании, падении сети) этот sleep 5 внезапно растянется на часы
Код: Выделить всё
$src = 'c:\backup'
$dst = 'c:\archive'
Get-ChildItem $src -File -Recurse | Where-Object {$_.LastWriteTime.Day -eq 1 } | Copy-Item -Destination $dst -WhatIfYuS_2, не стоит так "обрабатывать ошибки"
во-первых они стали менее информативны;
во вторых для вывода ошибок предназначен поток ошибок;
в третьих, если этот фрагмент начать использовать в групповых операциях, то при ошибке (переименовании, падении сети) этот sleep 5 внезапно растянется на часы
-
Busla
Re: PowerShell - Копирование файлов по дате
Цитата Busla:
не стоит так "обрабатывать ошибки"
возможно...
Цитата Busla:
во-первых они стали менее информативны;
Для представленного условия, информации более чем достаточно. Излишки информации пользователей пугают, особенно если они в красном цвете. В этом случае они их даже не читают, а пишут об ошибках давшему совет.
Цитата Busla:
если этот фрагмент начать использовать в групповых операциях
из пушек по воробьям можно пострелять и из рогатки от ракет тоже можно попытаться отстреливаться... будет задача для групповой операции, будет и другое решение. А для проверки наличия пары каталогов, этого вполне хватит.
Цитата Busla:
$_.LastWriteTime.Day -eq 1
Откуда появилась уверенность, что файлы надо копировать только те, которые были изменены первого числа любого месяца и любого года? В условии этого нет. И про рекурсивный отбор, тоже ни слова... зато есть уточнение:
Цитата nse:
папка1 с множеством файлов *.7z
не стоит так "обрабатывать ошибки"
PowerShell - Копирование файлов по дате
возможно...
Цитата Busla:
во-первых они стали менее информативны;
PowerShell - Копирование файлов по дате
Для представленного условия, информации более чем достаточно. Излишки информации пользователей пугают, особенно если они в красном цвете. В этом случае они их даже не читают, а пишут об ошибках давшему совет.

Цитата Busla:
если этот фрагмент начать использовать в групповых операциях
PowerShell - Копирование файлов по дате
из пушек по воробьям можно пострелять и из рогатки от ракет тоже можно попытаться отстреливаться... будет задача для групповой операции, будет и другое решение. А для проверки наличия пары каталогов, этого вполне хватит.
Цитата Busla:
$_.LastWriteTime.Day -eq 1
PowerShell - Копирование файлов по дате
Откуда появилась уверенность, что файлы надо копировать только те, которые были изменены первого числа любого месяца и любого года? В условии этого нет. И про рекурсивный отбор, тоже ни слова... зато есть уточнение:
Цитата nse:
папка1 с множеством файлов *.7z
PowerShell - Копирование файлов по дате
-
YuS_2
Re: PowerShell - Копирование файлов по дате
Цитата YuS_2:
Откуда появилась уверенность, что файлы надо копировать только те, которые были изменены первого числа любого месяца и любого года? В условии этого нет.
Как это нет?! Есть:
Цитата nse:
первого числа каждого месяца
Откуда появилась уверенность, что файлы надо копировать только те, которые были изменены первого числа любого месяца и любого года? В условии этого нет.
PowerShell - Копирование файлов по дате
Как это нет?! Есть:
Цитата nse:
первого числа каждого месяца
PowerShell - Копирование файлов по дате
-
Iska
Re: PowerShell - Копирование файлов по дате
В принципе можно и CMD
Решаю задачу: Копирую файл самый старый по дате изменения в каждом месяце. Если самая старая дата изменения файла в месяце не 01, а например, 05, будет скопирован файл за 05 число
[spoiler]Код: [/spoiler]
Если скрипт предполагается выполнять многократно, то, чтобы избежать повторного копирования, перед Copy лучше поставить проверку на существование файла в выходной папке
Код:
Примечание: отображение месяца и года в системе должны быть мм гггг
Решаю задачу: Копирую файл самый старый по дате изменения в каждом месяце. Если самая старая дата изменения файла в месяце не 01, а например, 05, будет скопирован файл за 05 число
[spoiler]Код: [/spoiler]
Код: Выделить всё
@Echo Off
Set "BoxIn=D:\CMD_Forum"
Set "MaskIn=*.7z"
Set "BoxOut=Z:\Box_Out"
Pushd "%BoxIn%"
Set "First= "
FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%MaskIn%" /B /A:-D /O:D /T:W`) DO Call :CopyFirst "%%f" %%~tf
Popd
GoTo :Eof
:CopyFirst
Set "Tekd=%2"
Set "Tekd=%Tekd:~-7%"
If "%First%"=="%Tekd%" GoTo :Eof
Set "First=%Tekd%"
Copy %1 "%BoxOut%\" >nul
GoTo :EofЕсли скрипт предполагается выполнять многократно, то, чтобы избежать повторного копирования, перед Copy лучше поставить проверку на существование файла в выходной папке
Код:
Код: Выделить всё
rem Copy %1 "%BoxOut%\" >nul
If Not Exist "%BoxOut%\%~1" Echo %1 &Copy %1 "%BoxOut%\" >nulПримечание: отображение месяца и года в системе должны быть мм гггг
-
megaloman
Re: PowerShell - Копирование файлов по дате
Цитата Iska:
Как это нет?! Есть
А вот так вот, нет:
Цитата nse:
Как скопировать файлы первого числа каждого месяца в папку2
а не: скопировать файлы изменённые первого числа.
такшта...
И запятых, тоже нет... увы...
Как это нет?! Есть
PowerShell - Копирование файлов по дате
А вот так вот, нет:
Цитата nse:
Как скопировать файлы первого числа каждого месяца в папку2
PowerShell - Копирование файлов по дате
а не: скопировать файлы изменённые первого числа.
такшта...

И запятых, тоже нет... увы...
-
YuS_2
Re: PowerShell - Копирование файлов по дате
YuS_2, ну, я понял процитированное Вами именно как:
Цитата YuS_2:
а не: скопировать файлы изменённые первого числа.
Цитата YuS_2:
а не: скопировать файлы изменённые первого числа.
PowerShell - Копирование файлов по дате