4

我有一堆文件的名称以数字开头,可能在两个数字之一之后包含空格和破折号,然后有时(有时没有)在我要保留的名称的第一个字母字符之前有一个空格,即:

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)

4

3 回答 3

6

和cmdlet 可以直接从管道接受源Move-ItemRename-Item使用脚本块提供新名称:

dir | Move-Item -Destination { $_.Name -replace '^([0-9\-\s]*)' }

或者

dir | Rename-Item -NewName { $_.Name -replace '^([0-9\-\s]*)' }
于 2013-03-31T22:04:04.033 回答
4
dir c:\tmp | % {
     mv $_.FullName $(Join-Path $_.Directory ($_.Name -replace "^([0-9\-\s]*)",'').Trim());
}

如果需要递归处理YourDirectory,在-recurse后面加上dir

于 2013-02-24T11:58:20.770 回答
0

尝试这样的事情:

$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.

于 2013-02-24T12:10:07.077 回答