使用重命名功能修改文件名的多个部分?

Use the rename function to modify multiple parts of a filename?

我有以下模式:

[AAAAAA] 标题 - 1234 (AAAAAA)[有所改变].mkv

我只想保留: 标题 - 1234

AAAAAA 部分始终相同:第一组 10 个字母,第二组 4 个数字 + 1 个字母。

标题 - 1234 部分不断变化。 [变化的东西] 部分不断变化。

有没有办法删除 ] 之前和 ( 之后的内容,这样我就只保留标题和第 n° 集?

我不介意执行多个“重命名”命令(无论如何我都是批量执行的)

有什么办法吗?

谢谢!

使用 -replace 正则表达式运算符:

Get-ChildItem -Filter *.mkv |Rename-Item -NewName {"$($_.BaseName -replace '^\[\p{L}{10}\]\s*([^\(]+).*$','').mkv"}

使用的模式

^\[\p{L}{10}\]\s*([^\(]+).*$

... 匹配项:

^              # Start of string
 \[            # Literal `[`
 \p{L}{10}     # 10 consecutive letters
 \]            # Literal `]`
 \s*           # Any whitespace
 ([^\(]+)      # Capture the longest possible sequence on non-`(` chars
 .*            # the rest of the string (eg. `(ABCD1) something something.mkv`)
$              # End of string

然后我们用 ]( 之间捕获的所有内容替换整个内容。

使用此字符串替代:

从头开始查找第一个“]”和trim 然后 trim 所有在第一个 "("

@echo off

setlocal enabledelayedexpansion

for %%F in (*.mkv) do (
   set "f=%%~F"
   set "f=!f:*]=!"
   call :trim
   echo ren "%%~F" "!f!%%~xF"
)

pause
goto :eof

:trim
SET f=%f:(=&rem.%
goto :eof

输出:

C:\Users\fposc\AppData\Local\Temp>ren1
ren "[AAAAAA] Title - 1234 (AAAAAA)[Something that changes].mkv" " Title - 1234 .mkv"
Premere un tasto per continuare . . .

如果您想删除前导和尾随空格,您可以将它们包含在代码中,如下所示:

@echo off

setlocal enabledelayedexpansion

for %%F in (*.mkv) do (
   set "f=%%~F"
   set "f=!f:*] =!"
   call :trim
   echo ren "%%~F" "!f!%%~xF"
)

pause
goto :eof

:trim
SET f=%f: (=&rem.%
goto :eof

输出:

C:\Users\fposc\AppData\Local\Temp>ren1
ren "[AAAAAA] Title - 1234 (AAAAAA)[Something that changes].mkv" "Title - 1234.mkv"
Premere un tasto per continuare . . .

测试一下,当没问题时,您可以删除“echo”并留下“ren”命令,或者将输出复制到一个文件中,然后执行。