我不太了解(在细节和细节上)Powershell 在处理路径字符串中的方括号(只是因为它在内部多次转义字符串)中的愚蠢和荒谬的问题/错误,我必须在其中使用带有星号的正则表达式(*)匹配/捕捉模式。
我做了大量的谷歌搜索,发现有一种方法[WildcardPattern]::Escape($Filename)
可以帮助我Rename-Item
这样的动态文件路径,我认为下面的代码可以处理当前文件夹中文件类型扫描结果的动态路径,但令人失望的是,它没有:
Set-Location "$PSScriptRoot"
$MkvFiles = Get-ChildItem -Filter *.mkv -Path $Path
Foreach ($MkvFile in $MkvFiles) {
$MkvOrigName = [WildcardPattern]::Escape($MkvFile.Name)
$MkvOrigFullname = [WildcardPattern]::Escape($MkvFile.FullName)
If ($MkvOrigName -Match '.*(S[0-9]{2}E[0-9]{2}).*') {
$NewNameNoExt = $MkvOrigFullname -Replace '.*(S[0-9]{2}E[0-9]{2}).*', '$1'
$NewName = "$NewNameNoExt.mkv"
Rename-Item $MkvOrigFullname -NewName $NewName
}
}
Rename-Item
当我在包含问题末尾给出的文件的文件夹上运行上述脚本时,我收到以下命令错误:
Rename-Item : An object at the specified path C:\Users\Username\Downloads\WebseriesName Season
4\WebSeriesName.2016.S04E13.iNTERNAL.480p.x264-mSD`[eztv`].mkv does not exist.
At C:\Users\Username\Downloads\WebseriesName Season 4\BulkFileRenamerFinalv1.ps1:12 char:9
+ Rename-Item $MkvOrigFullname -NewName $NewName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我正在处理的当前文件夹中的 Webseries 文件路径如下:
WebSeriesName.2016.S04E01.HDTV.x264-SVA[eztv].mkv
WebSeriesName.2016.S04E02.HDTV.x264-SVA[eztv].mkv
....
....
WebSeriesName.2016.S04E12.iNTERNAL.480p.x264-mSD[eztv].mkv
WebSeriesName.2016.S04E13.iNTERNAL.480p.x264-mSD[eztv].mkv
有人可以帮助我一般地解决这个问题,而不需要对文件名字符串包含的内容进行头脑风暴,只要它们包含字符串等S04E01
,S04E02
并且肯定包含方括号?也就是说,如前面提到的代码中所示,我怎样才能转义方括号并将它们重命名为下面给出的名称?
S04E01.mkv
S04E02.mkv
....
....
S04E12.mkv
S04E13.mkv