2012-01-22 2 views
2

Попытка создать пакет для преобразования .WTV-файлов в файлы mpg. В приведенном ниже коде я хочу запустить один раз в сутки, чтобы конвертировать ежедневные записи для использования на моем медиа-сервере. Раздел, в котором я беспокоюсь о синтаксисе, является строкой цикла for. Я просто хочу запустить скрипт в файлах, которые не были преобразованы и перемещены. Я не могу удалить оригинал в случае возникновения ошибки. Последний цикл перемещения - получить все файлы, которые он не мог перенести с первой попытки.Пакетный синтаксис для цикла Если существует

входных файлов выглядит следующим образом: show.wtv

выход в файле show.wtv.mpg (который я в порядке с)

Я не знаю, как написать, что для цикла для получения желаемой функциональности. Любая помощь приветствуется.

Оригинальная идея пришла из http://ireckon.net/2009/10/converting-wtv-to-mpg-in-windows-7/

@echo off 

set recordedtv="D:\Recorded TV\" 
set destfolder="D:\Videos\Recorded TV\" 
set ffmpeg="D:\TV Converter\FFMPEG\ffmpeg.exe" 
set wtvconv="C:\Windows\ehome\WTVConverter.exe" 

for %%f in (%recordedtv%*.wtv) Do If Not Exist "%destfolder%%%f.mpg" (
%wtvconv% "%%f" "%%f.dvr-ms" 
%ffmpeg% -y -i "%%f.dvr-ms" -vcodec copy -acodec copy -f dvd "%%f.mpg" 
del "%%f.dvr-ms" 
move "%%f.mpg" %destfolder% 
) 

for %%f in (%recordedtv%*.mpg) Do move "%%f" %destfolder% 

UPDATE: Законченное с помощью этого

@echo off 

set "recordedtv=D:\Recorded TV\" 
set "destfolder=D:\Videos\Recorded TV\" 
set ffmpeg="D:\TV Converter\FFMPEG\ffmpeg.exe" 
set wtvconv="C:\Windows\ehome\WTVConverter.exe" 

for %%f in ("%recordedtv%*.wtv") do If Not Exist "%destfolder%%%~nxf.mpg" (
%wtvconv% "%%f" "%%f.dvr-ms" 
%ffmpeg% -y -i "%%f.dvr-ms" -vcodec copy -acodec copy -f dvd "%%f.mpg" 
del "%%f.dvr-ms" 
move "%%f.mpg" "%destfolder%" 
) 

for %%f in ("%recordedtv%*.mpg") Do move "%%f" "%destfolder%" 

ответ

1

Если вы планируете добавить другие части к путям, хранящихся в переменных, не хранят пути с окружающие кавычки. Просто оставьте двойные кавычки из или положить их так:

... 
set "recordedtv=D:\Recorded TV\" 
set "destfolder=D:\Videos\Recorded TV\" 
... 

Таким образом, вы будете иметь возможность объединять пути с названиями/масками, не вызывая ошибки синтаксиса. Обратите внимание, что ваши пути не разграничены в двойных кавычках, так что вам нужно, чтобы разграничить их, где они оцениваются, по мере необходимости, так, к примеру, for петли будет выглядеть следующим образом:

for %%f in ("%recordedtv%*.wtv") do ... 
... 
for %%f in ("%recordedtv%*.mpg") do ... 

Обратите внимание другие места. Например, в move команды в вашем сценарии целевой путь также должен быть ограничен:

move "%%f.mpg" "%destfolder%" 

Что касается файла проверки существования, что делается с помощью if exist команды:

if exist target_file (
... // do whatever you need to do in case the file exists 
) 

target_file бит может быть файлом, маской или каталогом (в последнем случае он должен заканчиваться \).

UPDATE

Я думаю, теперь я вижу определенную проблему с вашим сценарием. Эта часть

for %%f in (%recordedtv%*.wtv) Do If Not Exist "%destfolder%%%f.mpg" 

плохая в том, что она ставит вашу папку и полный путь к файлу .wtv вместе и использует полученную строку в качестве одного пути. Так "%destfolder%%%f" получает оценку на что-то вроде этого:

"D:\Videos\Recorded TV\D:\Recorded TV\somename.wtv.mpg" 

Я только не уверен, что дополнительные кавычки, но это не точка здесь. Наверное, вы можете видеть основную проблему.Чтобы устранить это, необходимо извлечь только имя и расширение файла из D:\Recorded TV\somename.wtv.mpg, что делается с использованием комбинированных ~nx спецификатора (n стоящими за «имя» и x для «расширений»):

for %%f in ("%recordedtv%*.wtv") Do If Not Exist "%destfolder%%%~nxf.mpg" 

(Обратите внимание, что пути к папкам все равно должны храниться без окружающих двойных кавычек, чтобы их можно было правильно оценивать в сложных выражениях.)

+0

спасибо за все советы, но это не помогает общей проблеме. – GRush

+0

@GRush: Что * * общая проблема? –

+0

для %% f in (% записаноtv% *. Wtv) Do If Ex Exent "% destfolder %%% f.mpg" ( Я немного поработал, чтобы получить, если не существует, чтобы работать, и я не увенчался успехом. – GRush

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