我正在CMD中使用Windows的Powershell从文件名中删除“星期一,星期二,星期三”等,效果很好
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace("Mon ", "") }
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace("Tue ", "") }
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace("Wed ", "") }
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace("Thur ", "") }
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace("Fri ", "") }
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace("Sat ", "") }
现在我的文件名看起来像这样: 2018年7月13日-Lorem ipsum
我想将日期与月份切换,因此它将是: 2018年7月13日,所以我可以按月对其进行排序。甚至是2018年7月13日。
我该怎么办?
谢谢, 迈克
答案 0 :(得分:2)
您可以将{{1}和带有delay-bind script block的-replace
operator结合使用,将两个所需的转换组合为单个操作基于 regex (正则表达式)根据需要转换文件名。
Rename-Item
Get-ChildItem -Recurse -Name | Rename-Item -NewName {
$_.Name -replace '\w+ (\d+) (\w+) (\d+)', '$3 $2 $1'
} -WhatIf
预览重命名操作;删除它以执行实际的重命名。
例如,名为-WhatIf
的输入文件将重命名为
Mon 13 July 2018 - Lorem ipsum
。
注意:此示例文件名碰巧没有文件扩展名,但是上面和下面的解决方案都同样适用于具有扩展名的文件名。
有关PowerShell的2018 July 13 - Lorem ipsum
运算符的详细信息,请参阅this answer。
如果您想使用嵌入的格式(例如-replace
来表示2018-07-13
来使文件名真正可排序,则需要通过-split
operator进行更多工作:
13 July 2018
例如,名为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
。
有关PowerShell的2018-07-13 - Lorem ipsum
运算符的更多信息,请参见this answer。
帮助主题about_Assignment_Operators
-split
)
答案 1 :(得分:1)
不是您的问题的答案,IMO mklement0的答案最有效。
但是可以替代您的 ugly 次优示例代码。
基于RegEx的-replace运算符优于.replace()方法
当要替换时。
[Globalization.DatetimeFormatInfo]::CurrentInfo.AbbreviatedDayNames
返回当前语言环境的缩写日期名称,可以将其组合
在一个带有代码的RegEx "(Sun|Mon|Tue|Wed|Thu|Fri|Sat) "
中
$RE=[regex]"("+([Globalization.DatetimeFormatInfo]::CurrentInfo.AbbreviatedDayNames -join '|')+") "
Get-ChildItem -recurse -File | Rename-Item -NewName {$_.Name -replace $RE} -WhatIf
不需要用-replace运算符表示空的替换字符串。
如果输出看起来不错,请删除结尾的-WhatIf
答案 2 :(得分:0)
您可以将每个月的替换链接起来,并以replace语句结尾以切换数字
"13 July 2018 - Lorem ipsum" `
-replace 'July', '07' `
-replace 'Aug', '08' `
-replace "(\d+) (\d+) (\d+)", '$3 $2 $1'
返回三明治
2018 07 13 - Lorem ipsum
答案 3 :(得分:0)
您可以使用以下代码转换日期
$string = '13 July 2018 - Lorem ipsum'
$dateObject = [datetime]$string.Split('-')[0]
Write-Output "$($dateObject.ToString('yyyy MMMM dd')) - $($array[1])"
这将输出
2018 July 13 - Lorem ipsum