#powershell
#powershell
Вопрос:
Я пытаюсь вернуть все файлы во вложенных папках папки, у которых есть время последней записи в течение определенного промежутка времени. Я бы хотел, чтобы эти файлы были только в одной таблице. Я хочу видеть имя файла, размер файла и LastWriteTime.
У меня пока есть этот код:
$timestartstr = "2020-09-16 07:00:00"
$timestart = [datetime]::ParseExact($timestartstr, "yyyy-MM-dd HH:mm:ss", $null)
$timeendstr = "2020-09-16 09:00:00"
$timeend = [datetime]::ParseExact($timeendstr, "yyyy-MM-dd HH:mm:ss", $null)
$dir = "pathtoparentfolder"
Get-ChildItem -Recurse $dir
Where-Object {$_.LastWriteTime -gt $timestart -and $_.LastWriteTime -lt $timeend}
Format-Table LastWriteTime, Name
Это не фильтрация по указанному мной временному интервалу, gt / lt, похоже, ничего не делает, а также возвращает отдельную таблицу для каждого подкаталога.
Я относительно новичок в PS и не могу понять, как достичь того, чего я хочу.
Обновить
Смотрите комментарии под принятым ответом о том, как исключить имена папок из результатов
Окончательный рабочий сценарий:
$timestartstr = "2020-09-16 07:00:00"
$timestart = [datetime]::ParseExact($timestartstr, "yyyy-MM-dd HH:mm:ss", $null)
$timeendstr = "2020-09-16 09:00:00"
$timeend = [datetime]::ParseExact($timeendstr, "yyyy-MM-dd HH:mm:ss", $null)
$dir = "pathtoparentfolder"
Get-ChildItem -Recurse -File $dir |
Where-Object {$_.LastWriteTime -gt $timestart -and $_.LastWriteTime -lt $timeend} |
Select-Object Name,LastWriteTime,Length
Редактировать
Указанное Length
свойство указано в байтах, не очень читаемо, ниже приведено обновление для этой строки, чтобы вернуть размер в МБ как Double
.
Select-Object Name,LastWriteTime,@{N='SizeMB';E={[double]('{0:N2}' -f ($_.Length/1kb))}}
Комментарии:
1. у вас нет никаких
|
символов в конце строк «предполагается, что это конвейер». [ усмешка ]2. кроме того, здесь, в часовом поясе CST, он по-прежнему 15-й, а не 16-й. [ усмешка ]
3. Ха-ха, да, у меня изначально были
|
символы, но я удалил их, пытаясь добиться желаемого поведения 🙂 Я в Новой Зеландии, отсюда и дата 😉4. ах! [ усмешка ] с этими элементами, с которыми я имею дело, ваш код работает для меня, чтобы получить элементы в желаемом диапазоне времени.
Ответ №1:
Как указал мистер Ли_дэйли, вам не хватает связующего звена между вашими командами — символа канала |
. Вам также не хватает свойства length, и я рекомендую использовать Select-Object
over Format-Table
, чтобы сохранить элементы как надлежащие объекты.
Get-ChildItem -Recurse $dir |
Where-Object {$_.LastWriteTime -gt $timestart -and $_.LastWriteTime -lt $timeend} |
Select-Object Name,LastWriteTime,Length
Редактировать:
Чтобы исключить каталоги, вы можете просто применить -File
параметр к Get-ChildItem
Get-ChildItem -File -Recurse $dir |
Where-Object {$_.LastWriteTime -gt $timestart -and $_.LastWriteTime -lt $timeend} |
Select-Object Name,LastWriteTime,Length
Комментарии:
1. Приветствия, одна вещь, которую я забыл указать в вопросе, заключается в том, как исключить это из возвращаемых имен папок?