Batch file 如何从文件名中删除文件扩展名?

Batch file 如何从文件名中删除文件扩展名?,batch-file,Batch File,我编写了一些简单的批处理文件,可以将任何音频/视频文件转换为.ogg(音频)格式。例如,youtube上的音乐是.flv格式的。以下是脚本: set ogg_rate=1.3 set source_dir=f:\music set dest_dir=f:\music\out set my_temp=f:\temp Rem Go to source dir cd /d %source_dir% for %%f in (*.*) do ( Rem Extract audio from avi f

我编写了一些简单的批处理文件,可以将任何音频/视频文件转换为.ogg(音频)格式。例如,youtube上的音乐是.flv格式的。以下是脚本:

set ogg_rate=1.3
set source_dir=f:\music
set dest_dir=f:\music\out
set my_temp=f:\temp

Rem Go to source dir
cd /d %source_dir%
for %%f in (*.*) do (

Rem Extract audio from avi file using ffmpeg
c:\encode\ffmpeg.exe -i "%source_dir%\%%f" "%my_temp%\%%f.wav"

rem Encode the audio with OGG encoder using 1.3 quality setting
cd /d %my_temp%
c:\encode\oggenc2.exe -q %ogg_rate% -o "%dest_dir%\%%f.ogg" "%my_temp%\%%f.wav"

rem delete all temp files
cd /d %my_temp%
del *.* /q
)
它可以在文件中工作,但我不知道如何删除不必要的扩展名

例如,如果输入文件是
file.flv
,则在转换为wave后,它将是
file.flv.wav
,然后在转换为
.ogg
后,它将是
file.flv.ogg

如何获取
文件.ogg
(没有
.flv


顺便说一下:它可以是
.mp4
.avi
或其他扩展名,而不是
.flv

for
语句中,尝试使用
%%nf
而不是
%%f
。您可以利用许多替代选项:

for   %%R in (*.*) do (
    @echo %%~nR 
)

谢谢你的回答,但是,很奇怪,%%~nf不起作用-我在你提供的链接中读到,它应该只使用文件名而不使用扩展名,它会给出“此时意外”。不知道为什么它不起作用……好的,我知道了。我需要使用%%~nf,不是在任何地方,而是在只需要文件名的地方。像这样:对于%%f in(.)do(c:\encode\ffmpeg.exe-i”%source\u dir%%\%f“%my\u temp%%\%%nf.wav”cd/d%my\u temp%c:\encode\oggenc2.exe-q%ogg\u rate%-o”%dest\u dir%%\%%~nf.ogg“%my\u temp%%\%%~nf.wav”)如果您需要这些东西的简便列表,请尝试
获取/?
我认为您是直接将%~nf放在for语句中。我用一个例子更新了我的答案。