我有一堆文件的名称以数字开头,可能在两个数字之一之后包含空格和破折号,然后有时(有时没有)在我要保留的名称的第一个字母字符之前有一个空格,即:
2-01 Dazed And Confused.txt(我想把这个重命名为 Dazed And Confused.txt)
或者
02 - Uncle Salty.txt(我想重命名为 Uncle Salty.txt)
或者
02-The Night Before.txt(我想重命名为The Night Before.txt)
我有一堆文件的名称以数字开头,可能在两个数字之一之后包含空格和破折号,然后有时(有时没有)在我要保留的名称的第一个字母字符之前有一个空格,即:
2-01 Dazed And Confused.txt(我想把这个重命名为 Dazed And Confused.txt)
或者
02 - Uncle Salty.txt(我想重命名为 Uncle Salty.txt)
或者
02-The Night Before.txt(我想重命名为The Night Before.txt)
和cmdlet 可以直接从管道接受源Move-Item
并Rename-Item
使用脚本块提供新名称:
dir | Move-Item -Destination { $_.Name -replace '^([0-9\-\s]*)' }
或者
dir | Rename-Item -NewName { $_.Name -replace '^([0-9\-\s]*)' }
dir c:\tmp | % {
mv $_.FullName $(Join-Path $_.Directory ($_.Name -replace "^([0-9\-\s]*)",'').Trim());
}
如果需要递归处理YourDirectory,在-recurse
后面加上dir
。
尝试这样的事情:
$re = '^\d+\s*-\d*\s*(.*)$'
$recurse = $false
Get-ChildItem "C:\some\folder" -Recurse:$recurse | ? {
-not $_.PSIsContainer -and $_.Name -match $re
} | % {
Move-Item $_.FullName (Join-Path $_.Directory $matches[1])
}
如果您希望连字符是可选的,请将正则表达式更改为'^\d+\s*-?\d*\s*(.*)$'
.
如果要递归到子文件夹,请更改$recurse
为$true
.