我在磁盘上有德语格式的文件夹:“01.05.2019”,我想将其转换为英语格式:“2019-05-01”。
我正在使用 PowerShell。这样做有什么花哨的功能吗?或者我应该获取所有子字符串并重新排序吗?
目前我只收集字符串:
$OrgDir = "P:\Fotos\Import"
$folders = Get-ChildItem $($OrgDir) -Directory
foreach ($dir in $folders) {
Write-Host "folder: " $dir
}
最佳答案
使用 [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
中的所有目录重命名为新的日期格式,假设文件夹中的所有目录都以此方式命名。
更新:
正如@Matt Johnson 指出的那样,$null
使用您的系统默认文化 ParseExact(string, format, culture)
(以及 ToString(format , 文化)
).这可能会也可能不会导致问题,具体取决于您的系统当前的文化设置。
为确保这些设置不会干扰此功能,请使用 [System.Globalization.CultureInfo]::InvariantCulture
作为 ParseExact()
和 ToString()
.
关于string - 将日期格式从 DD.MM.YYYY 转换为 YYYY-MM-DD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56842327/