Используйте [DateTime]::ParseExact()
, чтобы парсер даты не перепутал месяц и день:
$OrgDir = "P:\Fotos\Import"
$folders = Get-ChildItem $OrgDir -Directory
foreach ($dir in $folders) {
Write-Host "folder: $([DateTime]::ParseExact($dir.Name, "dd.MM.yyyy", $null).ToString("yyyy-MM-dd"))"
}
Выше распечатаны преобразованные имена. Однако, чтобы эффективно переименовать файлы, я рекомендую следующее:
Get-ChildItem $OrgDir -Directory |
ForEach-Object {
$_ | Rename-Item -NewName (
[DateTime]::ParseExact($_.Name, "dd.MM.yyyy", $null).ToString("yyyy-MM-dd")
)
}
Эта строка PowerShell переименовывает все каталоги в $OrgDir
в новый формат даты, учитывая, что все каталоги в папке названы таким образом.
1012 * Ссылка *
UPDATE:
Как отметил @Matt Johnson, $null
использует вашу системную культуру по умолчанию для ParseExact(string, format, culture)
(а также ToString(format, culture)
). Это может вызывать или не вызывать проблемы в зависимости от того, какая культура в вашей системе установлена в данный момент.
Чтобы эти настройки не мешали этой функции, используйте [System.Globalization.CultureInfo]::InvariantCulture
для параметров культуры в ParseExact()
и ToString()
.