Так что этот скрипт должен сделать свое дело. Это относительно просто.
$files = Get-ChildItem $basePath -File -Filter *.png -Recurse foreach($file in $files){ $pathParts = $file.fullName.split('\') $dateMod = $file.LastWriteTime.ToString("MM-dd-yyyy") $first = $pathParts[-3] $second = $pathParts[-2] $file | Rename-Item -NewName "$first - $second - $dateMod.txt" }
Вот разбивка по частям:
$files = Get-ChildItem $basePath -File -Filter *.png -Recurse
Сначала он получает все файлы, начиная с базового пути (вам придется установить $basepath
переменную по вашему пути) рекурсивно до конца структуры.
foreach($file in $files){ $pathParts = $file.fullName.split('\') $dateMod = $file.LastWriteTime.ToString("MM-dd-yyyy") $first = $pathParts[-3] $second = $pathParts[-2] $file | Rename-Item -NewName "$first - $second - $dateMod.txt" }
Тогда для каждого файла это:
Разбивает полное имя файла (путь и имя файла) на основе символа '\'.
$pathParts = $file.fullName.split('\')
Получает доступ к lastWriteTime и форматирует его в нужный вам формат.
$dateMod = $file.LastWriteTime.ToString("MM-dd-yyyy")
Для
$first
и$second
переменного он обращается к пути, который был разделен с правой стороны (-1 будет именем файла, -2 является родитель, -3 является родителем этого родителя и так далее).$first = $pathParts[-3]
$second = $pathParts[-2]
Принимает всю собранную информацию и переименовывает файл в эти фрагменты собранной информации.
$file | Rename-Item -NewName "$first - $second - $dateMod.txt"