2013-05-20 2 views
-1

Я написал несколько простых командных файлов, которые преобразуют любые аудио/видео файлы в формат .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 затем после преобразования волны будет file.flv.wav, то после преобразования его в .ogg будет file.flv.ogg.

Как получить file.ogg (без .flv)

КСТАТИ: вместо .flv может быть .mp4, .avi или другое расширение.

ответ

2

В своем заявлении for попробуйте использовать %%~nf вместо %%f. For statements in batch files имеют много вариантов замещения вы можете использовать:

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

Спасибо за ответ, но, strangly, %% ~ Н.Ф. не работает - он дает «неожиданным в это время» Я прочитал в ссылке, которую вы при условии, что он должен принимать имя файла только без расширения. Не уверен, почему это не работает, хотя .. – Mike

+1

ОК, я понял. Мне нужно использовать %% ~ nf не везде, но где я хочу только имя файла. например: for %% f in (*. *) do ( c: \ encode \ ffmpeg.exe -i "% source_dir% \ %% f" "% my_temp% \ %% ~ nf.wav" cd/d% my_temp% c: \ encode \ oggenc2.exe -q% ogg_rate% -o "% dest_dir% \ %% ~ nf.ogg" "% my_temp% \ %% ~ nf.wav" ) – Mike

+1

если вы вам нужен удобный список таких вещей, попробуйте 'for /?' –

Смежные вопросы