在 Windows 中從檔案名稱中刪除特定字串後的字元的最佳方法

在 Windows 中從檔案名稱中刪除特定字串後的字元的最佳方法

我想知道是否有一種快速簡單的方法來搜尋具有多個字元的檔案名稱並刪除這些字元之後的所有字元。

例如,如果我有一個名為:

Great Movie Title 2021 1080p asldkfjalfj.mkv
Another Great Movie 1997 480p aldfasdfa.avi
Boring movie but its ok 2015 720p asadfqwr.mp4

我想在文件名中找到1080p, 720p,480p然後刪除其後面的所有內容。

我知道您可以使用 Windows BatchFor循環,但只能使用單一字元來尋找它。即使它是可以做到這一點的第三方應用程序,但我似乎找不到它。

答案1

您是在搜尋整個驅動器,還是只是搜尋單一目錄?

不管怎樣,PowerShell 都可以處理這個問題。

這將完成整個 C 驅動器,並重命名檔案名稱中包含 1080p 的任何內容:

cd c:\
Get-ChildItem -recurse -include *1080p* | foreach-object { $name = $_.fullname; $newname = $name -replace '1080p.*\.','1080p.'; rename-item $name $newname } 

然後您可以對 480p 和 720p 重複此操作。

答案2

電源外殼是要走的路。

這是另一種方法,可以一次完成所有這些操作並輕鬆修改。

這將從頂級資料夾運行。這樣做可以釋放-Path(此處為位置)參數來按多個文件類型進行過濾,因為-Path與 不同-Filter,可以採用值數組。

Get-ChildItem *.mkv, *.avi, *.mp4 -Recurse | ForEach {
    If ( $_.BaseName -match '^.+(1080p|720p|480p)' ) {
        Rename-Item -LiteralPath $_.FullName -NewName ( $matches[0] + $_.Extension )
    }
}

正規表示式'^.+(1080p|720p|480p)'匹配從檔案名稱開頭一直到並包含任何一個「or'd」( |) 解析字串的所有字元。該文字儲存在$matches自動變數中,並用於建構新名稱。

相關內容