str_replace %%~na批处理文件中的文件名[关闭]

问题描述 投票:0回答:1

我想替换批处理文件中的当前文件名

for %%a in ("*.mp4") do  ffmpeg -i "%%~a" -vf "drawtext=text=%%~na:fontfile='C\:\\Users\\harin\\Desktop\\test\\Fonts\\Glamy Sunrise.ttf':fontcolor=black:fontsize=54:x=20:y=50" -b:v 1M -r 60 -b:a 144k  -crf 17 "C:\Users\harin\Desktop\test\in\Working\1\%%~na.mp4"

需要用这样的东西替换

drawtext=text=%%~na
drawtext=text=str_replace(array('-','_'),array(' ',''),%%~na)

我该怎么做...thx

batch-file ffmpeg preg-replace
1个回答
1
投票

文件名的修改可以使用延迟变量扩展来完成:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
for %%I in (*.mp4) do (
    set "FullFileName=%%I"
    set "OnlyFileName=%%~nI"
    setlocal EnableDelayedExpansion
    set "OnlyFileName=!OnlyFileName:_=!"
    set "OnlyFileName=!OnlyFileName:-= !"
    ffmpeg.exe -i "!FullFileName!" -vf "drawtext=text=!OnlyFileName!:fontfile='C\:\\Users\\harin\\Desktop\\test\\Fonts\\Glamy Sunrise.ttf':fontcolor=black:fontsize=54:x=20:y=50" -b:v 1M -r 60 -b:a 144k -crf 17 "C:\Users\harin\Desktop\test\in\Working\1\!OnlyFileName!.mp4"
    endlocal
)
endlocal

假设批处理文件执行时的当前目录不是目录

C:\Users\harin\Desktop\test\in\Working\1
,因为在这种情况下,应修改 FOR 命令行来处理首先加载到
cmd.exe
内存中的文件名列表在运行 FOR 体内的命令之前。这可以通过使用第三行来实现:

for /F "eol=| delims=" %%I in ('dir *.mp4 /A-D-L /B 2^>nul') do (

如果当前目录下不存在文件名包含一个或多个感叹号的MP4文件,则批处理文件代码可以优化为以下代码。

@echo off
setlocal EnableExtensions EnableDelayedExpansion
for %%I in (*.mp4) do (
    set "FileName=%%~nI"
    set "FileName=!FileName:_=!"
    set "FileName=!FileName:-= !"
    ffmpeg.exe -i "%%I" -vf "drawtext=text=!FileName!:fontfile='C\:\\Users\\harin\\Desktop\\test\\Fonts\\Glamy Sunrise.ttf':fontcolor=black:fontsize=54:x=20:y=50" -b:v 1M -r 60 -b:a 144k -crf 17 "C:\Users\harin\Desktop\test\in\Working\1\!FileName!.mp4"
)
endlocal

要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。

  • echo /?
  • endlocal /?
  • for /?
  • set /?
  • setlocal /?

注意: 如果完整路径包含空格或这些字符之一

ffmpeg.exe
,则指定
"
及其完全限定文件名括在
&()[]{}^=;!'+,`~
中是最有效的,在这种情况下
cmd.exe
不会需要使用环境变量
ffmpeg.exe
PATH
在每个 *.mp4 文件上搜索文件
PATHEXT

© www.soinside.com 2019 - 2024. All rights reserved.