【问题标题】:Replace Spaces and . in filename with Underscores替换空格和 .在带有下划线的文件名中
【发布时间】:2018-01-28 07:19:11
【问题描述】:
我按照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
谁能解释为什么这也将文件名中的最后一个点(即扩展名的一部分)替换为下划线。这感觉就像是给了我鱼,却没有教我如何钓鱼。这个脚本有效,但遗憾的是它也取代了最后一个时期。
我想使用脚本而不必打开隐藏扩展。
【问题讨论】:
标签:
windows
batch-file
command-line
【解决方案1】:
你可以试试这个批处理脚本:
@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
::********************************************************
【解决方案2】:
替换是整体的,不能被限制。
解决方法很简单,只需为文件使用不带扩展名的名称并附加原始扩展名 - 这样只需要一个 for(对于每个替换)。
@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"
)
我不确定哪个更有效。