Использование get-children для вывода списка файлов с lastwritetime - PullRequest
2 голосов
/ 09 ноября 2010

С этими строками кода:

get-childitem -Path d:\scripts –recurse | 
where-object {$_.lastwritetime -gt (get-date).addDays(-1)} |
Foreach-Object { $_.FullName }

Я получаю список всего в каталоге d: \ scripts, отметка времени которого менее 1 дня. Выход:

D:\scripts\Data_Files
D:\scripts\Power_Shell
D:\scripts\Data_Files\BackUp_Test.txt
D:\scripts\Power_Shell\archive_test_1dayInterval.ps1
D:\scripts\Power_Shell\stop_outlook.ps1
D:\scripts\Power_Shell\test.ps1
D:\scripts\WinZip\test.wjf

Дело в том, что папки файлов (Data_Files & Power_Shell) имеют последнюю запись в параметре даты. Я просто хочу файлы как в строках 3 - 7 на выходе.

Предложения

Ответы [ 3 ]

8 голосов
/ 09 ноября 2010
get-childitem -Path d:\scripts –recurse |  
    where-object {$_.lastwritetime -gt (get-date).addDays(-1)} | 
    where-object {-not $_.PSIsContainer} |
    Foreach-Object { $_.FullName } 

$_.PSIsContainer верно для папок, что позволяет дополнительному объекту where отфильтровать их.

2 голосов
/ 10 ноября 2010

Попробуйте это:

dir d:\scripts –recurse | where {!$_.PSIsContainer -AND $_.lastwritetime -gt (get-date).addDays(-1)} | foreach { $_.FullName }
0 голосов
/ 10 ноября 2010
gci d:\scripts –recurse | 
  ? { $_.Attributes -band [System.IO.FileAttributes]::Archive } |
  ? { $_.LastWriteTime -gt (Get-Date).AddDays(-1) } | 
  foreach { $_.FullName }

или

gci d:\scripts –recurse | 
  ? { -not ($_.Attributes -band [System.IO.FileAttributes]::Directory) } |
  ? { $_.LastWriteTime -gt (Get-Date).AddDays(-1) } | 
  foreach { $_.FullName }
...