Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Копирование файлов по дате

Ответить
Настройки темы
PowerShell - Копирование файлов по дате
nse nse вне форума

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: nse
Дата: 20-06-2018
Описание: перемещение в другой раздел
Уважаемые форумчане! подскажите пожалуйста, есть ли возможность через power shell сделать следующее
Есть папка1 с множеством файлов *.7z (ежедневные бэкапы)
Как скопировать файлы первого числа каждого месяца в папку2
Условием отбора должна служить дата ИЗМЕНЕНИЯ файлов

Отправлено: 02:04, 20-06-2018

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


nse, в принципе, можно, но удобнее такие вещи делать а) на WSH/PowerShell, б) не «сейчас», а в момент создания самого архива.

Отправлено: 03:01, 20-06-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

nse nse вне форума Автор темы

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska,
Хорошо, перенес вопрос в раздел PowerShell
тогда помогите пожалуйста это сделать на PowerSell
На счет не "сейчас" это я согласен, но в моей ситуации нужно сделать сейчас, а в последствии модернизировать под момент создания архива

Отправлено: 08:39, 20-06-2018 | #3


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата nse:
Условием отбора должна служить дата ИЗМЕНЕНИЯ файлов »
Это можно. Вопрос только в том, какие именно файлы отбирать? Вчерашние, за месяц, за год, до какого числа и т.д. ...
Скопировать, думаю проблем не составит... загвоздка в отборе?
Например, отбор файлов с датой изменения не позднее, чем год назад от текущей даты:
Код: Выделить весь код
$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')}

-------
scio me nihil scire. Ѫ


Отправлено: 09:33, 20-06-2018 | #4


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$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 внезапно растянется на часы

Отправлено: 10:34, 20-06-2018 | #5


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Busla:
не стоит так "обрабатывать ошибки" »
возможно...
Цитата Busla:
во-первых они стали менее информативны; »
Для представленного условия, информации более чем достаточно. Излишки информации пользователей пугают, особенно если они в красном цвете. В этом случае они их даже не читают, а пишут об ошибках давшему совет.
Цитата Busla:
если этот фрагмент начать использовать в групповых операциях »
из пушек по воробьям можно пострелять и из рогатки от ракет тоже можно попытаться отстреливаться... будет задача для групповой операции, будет и другое решение. А для проверки наличия пары каталогов, этого вполне хватит.


Цитата Busla:
$_.LastWriteTime.Day -eq 1 »
Откуда появилась уверенность, что файлы надо копировать только те, которые были изменены первого числа любого месяца и любого года? В условии этого нет. И про рекурсивный отбор, тоже ни слова... зато есть уточнение:
Цитата nse:
папка1 с множеством файлов *.7z »

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 20-06-2018 в 11:50.


Отправлено: 11:43, 20-06-2018 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
Откуда появилась уверенность, что файлы надо копировать только те, которые были изменены первого числа любого месяца и любого года? В условии этого нет. »
Как это нет?! Есть:
Цитата nse:
первого числа каждого месяца »

Отправлено: 12:04, 20-06-2018 | #7


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


В принципе можно и CMD
Решаю задачу: Копирую файл самый старый по дате изменения в каждом месяце. Если самая старая дата изменения файла в месяце не 01, а например, 05, будет скопирован файл за 05 число
Код: Выделить весь код
@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, 20-06-2018 в 21:24.


Отправлено: 15:58, 20-06-2018 | #8


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Iska:
Как это нет?! Есть »
А вот так вот, нет:
Цитата nse:
Как скопировать файлы первого числа каждого месяца в папку2 »
а не: скопировать файлы изменённые первого числа.
такшта...
И запятых, тоже нет... увы...

-------
scio me nihil scire. Ѫ


Отправлено: 19:24, 20-06-2018 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


YuS_2, ну, я понял процитированное Вами именно как:
Цитата YuS_2:
а не: скопировать файлы изменённые первого числа. »

Отправлено: 19:54, 20-06-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Копирование файлов по дате

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Копирование файлов по дате Fantastish Скриптовые языки администрирования Windows 20 22-03-2023 11:33
Прочие - [решено] Сортирование файлов по папкам (копирование по дате создания) DIMM2005 Программное обеспечение Windows 36 03-01-2020 16:54
CMD/BAT - Выборка по дате и копирование файлов TiroEL Скриптовые языки администрирования Windows 2 17-08-2015 09:27
CMD/BAT - Сортирование файлов по папкам (копирование в многоуровневые папки по дате создания) Systems Скриптовые языки администрирования Windows 18 03-10-2014 11:37
CMD/BAT - [решено] Копирование файлов по дате создания Syna Скриптовые языки администрирования Windows 27 23-05-2013 14:02




 
Переход