Использование PowerShell для фильтрации папок по дате - PullRequest
0 голосов
/ 26 июня 2019

Я просматриваю папки, которые у нас есть на рабочем диске, в которых есть файлы старше 20 лет. Мы хотим переместить эти файлы с этого диска, чтобы очистить пространство и упорядочить его.

У меня есть сценарий PowerShell для просмотра папок и вывода в файл CSV.

Он помещается в файл CSV, но здесь есть тысячи файлов. Нам нужен только файл с последними изменениями. Это дает мне каждый файл.

Можно ли вывести только последний измененный файл из этой папки, а затем перейти в следующую папку?

Get-ChildItem -LiteralPath Y:\XYZ\MainFolder -Recurse -Depth 2  |Format-Table| Out-File C:\Users\USER\Desktop\aCSVfile.csv

1 Ответ

1 голос
/ 26 июня 2019

Вам потребуется PowerShell 5.x, в противном случае переключатель -Directory для Get-ChildItem будет недоступен:

Get-ChildItem -Path . -Directory -Recurse | Where-Object { $_.LastWriteTime -lt (Get-Date "2018-10-04") } | Export-Csv "test.csv" -NoTypeInformation -Delimiter ";"
  • Get-ChildItem -Path . -Directory -Recurse - получить все каталоги
  • Where-Object { $_.LastWriteTime -lt (Get-Date "2018-10-04") } - проверить, не старше ли время последней записи 2018-10-04 (вы также можете использовать LastAccessTime)
  • Export-Csv "test.csv" -NoTypeInformation -Delimiter ";" - экспортировать отфильтрованные объекты в файл CSV.

Если вам нужно меньше информации в CSV-файле, вы можете использовать Select-Object:

Get-ChildItem -Path . -Directory -Recurse | Where-Object { $_.LastWriteTime -lt (Get-Date "2018-10-04") } |Select-Object Name, PSPath, Parent | Export-Csv "test.csv" -NoTypeInformation -Delimiter ";"          

Чтобы получить доступные свойства, используйте Get-Member:

 Get-ChildItem -Path . -Directory -Recurse | Where-Object { $_.LastWriteTime -lt (Get-Date "2018-10-04") } | Get-Member

Output:

    TypeName: System.IO.DirectoryInfo

    Name                      MemberType     Definition
    ----                      ----------     ----------
    LinkType                  CodeProperty   System.String LinkType{get=GetLinkType;}
    Mode                      CodeProperty   System.String Mode{get=Mode;}
    ... 
    FullName                  Property       string FullName {get;}
    LastAccessTime            Property       datetime LastAccessTime {get;set;}
    LastAccessTimeUtc         Property       datetime LastAccessTimeUtc {get;set;}
    LastWriteTime             Property       datetime LastWriteTime {get;set;}
    LastWriteTimeUtc          Property       datetime LastWriteTimeUtc {get;set;}
    Name                      Property       string Name {get;}
    ...
    Attributes                Property       System.IO.FileAttributes Attributes {get;set;}
    CreationTime              Property       datetime CreationTime {get;set;}
    CreationTimeUtc           Property       datetime CreationTimeUtc {get;set;}
    ...

Здесь вы можете использовать *Property типы элементов в Select-Object и Where-Object.

Если вы используете PowerShell менее 5, вам необходимо проверитьсвойство PSIsContainer, как объяснено в этом стеке потока ответ .

Надеюсь, это информация, которую вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...