使用cmd.exe批处理文件和ffmpeg从字符串中删除字符

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

这是代码...

@echo off
:: set paths (no quotes)
set ffmpeg=F:\Video\Ffmpeg\ffmpeg.exe
set infolder=F:\Downloads
set outfolder=F:\Video\Finished



@echo.
@echo on
for %%f in (%infolder%\*.mp4) do "%ffmpeg%" -i "%%~dpnf.mp4" -c copy "%outfolder%\%%~nf.mp4"
@echo off
if errorlevel 1 pause
@echo.

此代码将 mpeg-dash 文件转换为 mp4。 mpeg-dash 是一种流文件格式。

输入和输出文件如下所示:“文件名 - DASH_V.mp4”。 (无引号)

我希望输出文件删除“-DASH_V”,因此它看起来像“filename.mp4”。 (无引号)

如有任何帮助,我们将不胜感激。可能是一个快速修复,例如将“%%~dpnf~-13.0.mp4”更改为最后一个命令,但如您所见,我对语法一无所知。

尝试了一百万件事却一事无成。对语法一窍不通。

windows for-loop batch-file replace cmd
1个回答
0
投票

您不能直接更改

for
变量的文件名。您可以替换或删除普通CMD变量中的子字符串,但要在此处使用此类子字符串,您需要使用
!
而不是
%
进行“延迟扩展”,大致如下:

setlocal enabledelayedexpansion
for %%f in (%infolder%\*.mp4) do (
  set "temp=%~nf"
  "%ffmpeg%" -i "%%~dpnf.mp4" -c copy "%outfolder%\!temp: - DASH_V=!.mp4"
  )
endlocal

或者你可以用

for ... do ( set ... & "%ffmpeg" ... )

压缩一条线

顺便说一句,您可以使用

%%~dpnf.mp4
而不是
%%f
——由
for
找到的全名。

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