使用重命名功能修改文件名的多个部分?
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”命令,或者将输出复制到一个文件中,然后执行。
我有以下模式:
[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”命令,或者将输出复制到一个文件中,然后执行。