Показать полную графическую версию : Копирование файлов по дате
Уважаемые форумчане! подскажите пожалуйста, есть ли возможность через power shell сделать следующее
Есть папка1 с множеством файлов *.7z (ежедневные бэкапы)
Как скопировать файлы первого числа каждого месяца в папку2
Условием отбора должна служить дата ИЗМЕНЕНИЯ файлов
nse, в принципе, можно, но удобнее такие вещи делать а) на WSH/PowerShell, б) не «сейчас», а в момент создания самого архива.
Iska,
Хорошо, перенес вопрос в раздел PowerShell
тогда помогите пожалуйста это сделать на PowerSell
На счет не "сейчас" это я согласен, но в моей ситуации нужно сделать сейчас, а в последствии модернизировать под момент создания архива
Условием отбора должна служить дата ИЗМЕНЕНИЯ файлов »
Это можно. Вопрос только в том, какие именно файлы отбирать? Вчерашние, за месяц, за год, до какого числа и т.д. ...
Скопировать, думаю проблем не составит... загвоздка в отборе?
Например, отбор файлов с датой изменения не позднее, чем год назад от текущей даты:
$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')}
$src = 'c:\backup'
$dst = 'c:\archive'
Get-ChildItem $src -File -Recurse | Where-Object {$_.LastWriteTime.Day -eq 1 } | Copy-Item -Destination $dst -WhatIf
YuS_2, не стоит так "обрабатывать ошибки"
во-первых они стали менее информативны;
во вторых для вывода ошибок предназначен поток ошибок;
в третьих, если этот фрагмент начать использовать в групповых операциях, то при ошибке (переименовании, падении сети) этот sleep 5 внезапно растянется на часы
не стоит так "обрабатывать ошибки" »
возможно...
во-первых они стали менее информативны; »
Для представленного условия, информации более чем достаточно. Излишки информации пользователей пугают, особенно если они в красном цвете. В этом случае они их даже не читают, а пишут об ошибках давшему совет. :)
если этот фрагмент начать использовать в групповых операциях »
из пушек по воробьям можно пострелять и из рогатки от ракет тоже можно попытаться отстреливаться... будет задача для групповой операции, будет и другое решение. А для проверки наличия пары каталогов, этого вполне хватит.
$_.LastWriteTime.Day -eq 1 »
Откуда появилась уверенность, что файлы надо копировать только те, которые были изменены первого числа любого месяца и любого года? В условии этого нет. И про рекурсивный отбор, тоже ни слова... зато есть уточнение:
папка1 с множеством файлов *.7z »
Откуда появилась уверенность, что файлы надо копировать только те, которые были изменены первого числа любого месяца и любого года? В условии этого нет. »
Как это нет?! Есть:
первого числа каждого месяца »
megaloman
20-06-2018, 15:58
В принципе можно и CMD@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
Примечание: отображение месяца и года в системе должны быть мм гггг
Как это нет?! Есть »
А вот так вот, нет:
Как скопировать файлы первого числа каждого месяца в папку2 »
а не: скопировать файлы изменённые первого числа.
такшта... ;)
И запятых, тоже нет... увы...
YuS_2, ну, я понял процитированное Вами именно как:
а не: скопировать файлы изменённые первого числа. »
megaloman
20-06-2018, 21:32
В принципе можно и CMD@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
Примечание: отображение месяца и года в системе должны быть мм гггг
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC