我有几个以下列格式命名的文件:
Friends.S05E01.Trailing-text-here.mkv
Friends.S05E02.Trailing-text-here.mkv
...
Friends.S05E24.Trailing-文本here.mkv
我想从文件名中删除" .Trailing-text-here" 段,并保留如下:
Friends.S05E01.mkv
我尝试了以下代码(我在测试期间回显了生成的文件名):
Get-ChildItem *.mkv | % {
$newName = $_.Name -replace '^(Friends.S05E\d{2})\.*', '$1'.mkv
echo $newName
#Rename-Item $_ $newName
}
但结果与我所寻求的相反;上面的代码返回:
Trailing-text-here.mkv
尾随文本here.mkv
...
尾随文本here.mkv
为什么$1
组与尾随部分匹配而不是我指定的部分?我在Windows 10 Pro上使用PsVersion
5.1.15063.674。
答案 0 :(得分:1)
您无需转义点.
字符。此外,包括$
强制捕获,直到文件名结束:
Get-ChildItem *.mkv | % {
$newName = $_.Name -replace '^(Friends.S05E\d{2}).*$', '$1.mkv'
echo $newName
#Rename-Item $_ $newName
}
答案 1 :(得分:1)
希望这会有所帮助,我写了一段时间回来做同样的事情。它只使用$baseName
的长度来切断文件名,因此是xx,然后附加.mkv
$folder = '\\nas\media\TV\Friends\Season 5'
$baseName = 'Friends.S05Exx' # Make sure ends in S00E
$files = Get-ChildItem $folder
foreach ($file in $files)
{
$fileName = $file.Name
$baseNumber = $fileName.Substring(0, ($baseName.Length))
$renamed = $folder + "\" + $baseNumber + '.mkv'
Write-Host "Rename $filename to $renamed"
Rename-Item -path ($folder + "\" + $filename) -newname $renamed
}