我按照https://stackoverflow.com/a/16129486/2000557的示例修改了视频文件文件夹的脚本。
@echo off
Setlocal enabledelayedexpansion
Set "Pattern=."
Set "Replace=_"
For %%a in (*.avi) Do (
Set "File=%%~a"
Ren "%%a" "!File:%Pattern%=%Replace%!"
)
For %%a in (*.mkv) Do (
Set "File=%%~a"
Ren "%%a" "!File:%Pattern%=%Replace%!"
)
For %%a in (*.mp4) Do (
Set "File=%%~a"
Ren "%%a" "!File:%Pattern%=%Replace%!"
)
Pause&Exit
任何人都可以解释为什么这也将文件名中的最后一个点(也就是扩展的一部分)替换为下划线。这感觉就像我被给了鱼而没有教过如何钓鱼。这个剧本有效,但遗憾的是它也取代了最后一个时期 我想在不必打开隐藏扩展的情况下使用该脚本。
答案 0 :(得分:1)
替换是整体的,不能受到限制。
解决方法很简单,只需使用不带文件扩展名的名称并附加原始扩展名 - 这样只需要一个(对于每个替换)。
@echo off & Setlocal EnableDelayedExpansion
For %%A in ("*.*.avi" "*.*.mkv" "*.*.mp4") Do (
Set "File=%%~nA"
Ren "%%A" "!File:.=_!%%~xA" 2>NUL
)
For %%A in ("* *.avi" "* *.mkv" "* *.mp4") Do (
Set "File=%%~nA"
Ren "%%A" "!File: =_!%%~xA" 2>NUL
)
或者这个版本
For %%A in (*.avi *.mkv *.mp4) Do (
Set "File=%%~nA"
Set "File=!File: =_!"
Set "File=!File:.=_!"
If "%%~nA" neq "!File!" Ren "%%A" "!File!%%~xA"
)
我不是更有效率的舒尔。
答案 1 :(得分:0)
您可以尝试使用此批处理脚本:
@echo off
Setlocal enabledelayedexpansion
Set "FileType=avi mp4 mkv"
Call :Search_Replace " " "." "!FileType!"
Call :Search_Replace "." "_" "!FileType!"
Timeout -1 & exit
::********************************************************
:Search_Replace <Pattern> <Replace> <FileType>
Set "Pattern=%~1"
Set "Replace=%~2"
@For %%# in (%~3) do (
For %%a in (*.%%#) Do (
Set "File=%%~na"
ren "%%a" "!File:%Pattern%=%Replace%!%%~xa"
)
)
Exit /b
::********************************************************