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

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

Ответить
Настройки темы
PowerShell - [решено] Поиск файлов (дата изменения с начала предыдущих суток)

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


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

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


Добрый день. Делается поиск файлов в указанном каталоге, включая вложенные папки с фильтром расширения.
Нужно найти все файлы, измененные вчера.
Однако если сейчас 12-00, и файл изменен вчера в 9-00 - в результат поиска он не попадает (что логично)
Если сделать adddays(-2) - туда попадут файлы в т.ч. с позавчера..
Код: Выделить весь код
Get-ChildItem "C:\fb\log\*" -include *.txt -Recurse | where-object {$_.LastWriteTime -ge ((Get-Date).adddays(-1))}

Отправлено: 14:29, 19-02-2020

 

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


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

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


Код: Выделить весь код
PS C:\WINDOWS\system32> (Get-Date).AddDays(-1)
18 февраля 2020 г. 14:49:12

PS C:\WINDOWS\system32> (Get-Date '19.02.2019').adddays(-1)
18 февраля 2019 г. 0:00:00
Опять же, все логично. Но как это использовать в условии поиска?

Отправлено: 14:50, 19-02-2020 | #2



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

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


Аватара для YuS_2

Crazy


Contributor


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

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


Код: Выделить весь код
((Get-Date)::today).adddays(-1)

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


Отправлено: 14:59, 19-02-2020 | #3


Ветеран


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

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


Правильнее было бы использовать
Код: Выделить весь код
(Get-Date).date.AddDays(-1)
или
Код: Выделить весь код
[datetime]::today.AddDays(-1)
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:08, 19-02-2020 | #4


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


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

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


YuS_2, Busla, Спасибо. все гениальное- просто!

Цитата Busla:
Правильнее было бы использовать »
А почему "правильнее" и где про это можно почитать?

Отправлено: 15:12, 19-02-2020 | #5


Аватара для YuS_2

Crazy


Contributor


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

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


скорее не правильнее, а привычнее... а правильность - понятие относительное.

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


Отправлено: 15:27, 19-02-2020 | #6


Ветеран


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

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


Цитата solonenko:
А почему "правильнее" »
Потому что командлет Get-Date, несмотря на своё название, возвращает дату-время (тип System.DateTime). Текущую дату и текущее время (некий аналог функции Now() в VBScript/VB/VBA). И в методе .AddDays(…) задействуется всё значение, а не только дни. Посему, при целом значении аргумента метода, количество дней увеличивается или уменьшается, а значение времени остаётся прежним. При дробном значении аргумента количество дней может как меняться, так и оставаться прежним, а вот значение времени заведомо изменится:
Код: Выделить весь код
PS C:\> Get-Date
среда, 19 февраля 2020 года 17:30:06

PS C:\> (Get-Date).AddDays(-1)
вторник, 18 февраля 2020 года 17:30:11

PS C:\> (Get-Date).AddDays(-0.5)
среда, 19 февраля 2020 года 05:30:18
Свойство .Date класса System.DateTime возвращает значение того же самого типа System.DateTime, но с приведённым к нулю значением времени:
Код: Выделить весь код
PS C:\> (Get-Date).Date
среда, 19 февраля 2020 года 00:00:00
Статическое свойство .Today того же самого класса System.DateTime также возвращает значение типа System.DateTime с текущей датой и с приведённым к нулю значением времени.

И посему «вчера» (.AddDays(-1)) в вышеприведённых коллегой Busla кодах будет означать «сутки назад, считая от нуля часов нуля минут сегодняшнего числа».

Отправлено: 17:39, 19-02-2020 | #7


Ветеран


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

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


Цитата solonenko:
А почему "правильнее" и где про это можно почитать? »
просто надо немножко вникнуть, что и как происходит

в случае
Код: Выделить весь код
((Get-Date)::today).adddays(-1)
скобки лишние
командлет Get-Date обращается к конструктору класса datetime
получает объект с текущим моментом времени
получает из объекта ссылку на родительский класс - всё тот же datetime
выкидывает объект
обращается к специализированному конструктору класса datetime
получает объект с моментом начала суток
вычитает один день

код
Код: Выделить весь код
[datetime]::today.AddDays(-1)
обращается к специализированному конструктору класса datetime
получает объект с моментом начала суток
вычитает один день

понятно, что если постоянно использовать подобные окольные пути, программы будут работать дольше и памяти требовать больше

вариант
Код: Выделить весь код
(Get-Date).date.AddDays(-1)
ресурсы не экономит, но вместо Get-Date может быть любой момент времени, и всё будет считаться относительно него
т.е. это "чистая функция" которая не использует side-эффекты - код с ней проще отлаживать, изменять, переиспользовать
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:23, 19-02-2020 | #8


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Busla:
скобки лишние
командлет Get-Date обращается к конструктору класса datetime
получает объект с текущим моментом времени
получает из объекта ссылку на родительский класс - всё тот же datetime
выкидывает объект
обращается к специализированному конструктору класса datetime
получает объект с моментом начала суток
вычитает один день »
аргумент...
Но на практике, первичное обращение:
Код: Выделить весь код
measure-command{((Get-Date)::today).adddays(-1)}

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 47
Ticks             : 470354
TotalDays         : 5,44391203703704E-07
TotalHours        : 1,30653888888889E-05
TotalMinutes      : 0,000783923333333333
TotalSeconds      : 0,0470354
TotalMilliseconds : 47,0354
Код: Выделить весь код
measure-command{[datetime]::today.AddDays(-1)}

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 60
Ticks             : 601712
TotalDays         : 6,96425925925926E-07
TotalHours        : 1,67142222222222E-05
TotalMinutes      : 0,00100285333333333
TotalSeconds      : 0,0601712
TotalMilliseconds : 60,1712
- не имеет значительных отличий, а при повторных обращениях (в обоих случаях) скорость выполнения измеряется тиками, т.е. она менее миллисекунды. Так что "правильность" - в данном случае, имеет только чисто академическое/теоретическое значение.

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


Отправлено: 23:20, 19-02-2020 | #9


Аватара для Charg

Ветеран


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

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


YuS_2, более 20% разницы в производительности... очень даже имеет.
Если такой командлет будет вызываться 20 раз в функции, которая будет вызываться 50 раз в скрипте - получится значительная задержка, которой могло бы и не быть.
Что уж говорить если такую функцию воткнут в foreach

Отправлено: 11:47, 20-02-2020 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Перенос атрибутов файлов - дата создания, изменения. __sa__nya Хочу все знать 11 12-08-2021 14:40
Названа дата начала продаж и стоимость часов Qualcomm Toq OSZone News Новости железа 9 29-11-2013 21:22
Названы стоимость и дата начала продаж PlayStation 4 OSZone News Новости информационных технологий 0 11-06-2013 09:30
Названа стоимость и дата начала продаж планшетов Surface Pro OSZone News Новости и события Microsoft 0 30-11-2012 11:30
При скачивании файлов из интернета дата изменения - это окончания скачивания __sa__nya Лечение систем от вредоносных программ 3 12-08-2009 16:05




 
Переход