Вы можете объединить оба желаемых преобразования в одну операцию , используя Rename-Item
с блоком сценария привязки с задержкой , в котором -replace
operator позволяет преобразовывать имя файла по необходимости на основе регулярного выражения (регулярное выражение).
Get-ChildItem -Recurse -Name | Rename-Item -NewName {
$_.Name -replace '\w+ (\d+) (\w+) (\d+)', '$3 $2 $1'
} -WhatIf
-WhatIf
превью операция переименования;удалите его для фактического переименования.
Например, входной файл с именем Mon 13 July 2018 - Lorem ipsum
будет переименован в
2018 July 13 - Lorem ipsum
.
Примечание.имя файла с примером не имеет расширения имени файла, но оба решения, приведенные выше и ниже, одинаково работают с именами файлов, которые имеют расширения.
Для получения дополнительной информации об операторе PowerShell -replace
см. этот ответ .
Если вы хотите сделать ваши имена файлов действительно сортируемыми , используя встроенный формат, такой как 2018-07-13
, для представления 13 July 2018
, требуется дополнительная работа черезоператор -split
:
Get-ChildItem -Recurse -Name | Rename-Item -NewName {
# Split the name into the date part (ignoring the weekday) and the
# rest of the file name.
$null, $date, $rest = $_.Name -split '\w+ (\d+ \w+ \d+)'
# Convert the date string to [datetime] instance, reformat it, and
# append the rest.
([datetime] $date).ToString('yyyy-MM-dd') + $rest
} -WhatIf
Например, входной файл с именем Mon 13 July 2018 - Lorem ipsum
будет переименован в
2018-07-13 - Lorem ipsum
.
ДляПодробнее об операторе PowerShell -split
см. этот ответ .
Назначение нескольких переменных ($null, $date, $rest = ...
) объясняется в разделе справки about_Assignment_Operators