У нас есть каталог, в котором есть множество подкаталогов (по одному в день) с серверами файлов в нем. К сожалению, файлы могут быть отправлены повторно, поэтому файл от 01.01.2020 можно повторно отправить (с немного другим именем, поскольку к имени файла добавлена метка времени) 03.02.2020. Структура выглядит примерно так:
- TopDir
- 20200801
- AFile_20200801_20200801150000 (с отметкой времени 2020-08-01 15:00:00)
- BFile_20200801_20200801150000
- CFile_20200801_20200801150000
- 20200802
- AFile_20200802_20200801150000
Таким образом, AFile от 2020-08-01 был повторно отправлен на 2020-08- 02 в 15:00.
Сейчас я пытаюсь получить список с самым последним файлом за день, поэтому я создал массив и заполнил его всеми файлами ниже TopDir (рекурсивно). Пока все хорошо, все файлы найдены:
$path = "Y:\";
$FileArray = @()
$FileNameArray = @()
$FileArrayCounter = 0
foreach ($item in Get-ChildItem $path -Recurse)
{
if ($item.Extension -ne "")
{
$StringPart1, $StringPart2, $StringPart3, $StringPart4 = $item.Name.Split('_');
$FileNameShort = "{0}_{1}_{2}" -f $StringPart1.Trim(), $StringPart2.Trim(), $StringPart3.Trim();
$FileNameShort = $FileNameShort.Trim().ToUpper();
$FileArray += @{FileID = $FileArrayCounter; FileNameShort = $FileNameShort; FileName = $item.Name; FullName = $item.FullName; LastWriteTime = $item.LastWriteTime};
$FileArrayCounter ++;
}
}
$FileArray = $FileArray | sort FileNameShort; #@{Expression={"FileNameShort"}; Ascending=$True} #, @{Expression={"LastWriteTime"}; Descending=$True}
foreach($f in $FileArray)
{
Write-host($f.FileNameShort, $f.LastWriteTime)
}
Write-host($FileArrayCounter.ToString() + " Dateien gefunden");
Вновь добавленный столбец FileNameShort включает подстроку имени файла. После этого я получаю две строки для AFile_20200801
:
- AFile_20200801, AFile_20200801_20200801150000, ...
- AFile_20200801, AFile_20200801_20200802150000, ...
Однако, когда я пытаюсь отсортировать свой массив (см. Код выше), вывод НЕ сортируется по имени. Вместо этого я получаю что-то вроде следующего:
- AFile_20200801
- CFile_20200802
- AFile_20200801
- BFile_20200801
What I хочу добиться сортировки по FileNameShort ASCENDING и LastWriteTime DESCENDING.
Что мне здесь не хватает?