尝试创建批处理以将.WTV文件转换为mpg文件。下面的代码我想每晚运行一次,以转换我的媒体服务器上使用的每日录音。我关注语法的部分是for循环行。我只想在尚未转换和移动的文件上运行脚本。我无法删除原件以防错误发生。最后一个移动循环是获取第一次尝试时无法移动的所有文件。
输入文件如下:show.wtv
文件中的输出是show.wtv.mpg(我很好)
我不知道如何编写for循环以获得所需的功能。任何帮助表示赞赏。
最初的想法来自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%
更新:使用此
结束@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%"
答案 0 :(得分: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
位可以是文件,掩码或目录(在后一种情况下,它应以\
结尾)。
<强>更新强>
我想我现在可以看到你脚本的一个特殊问题了。这部分
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
代表'name'和x
来完成的'延伸'):
for %%f in ("%recordedtv%*.wtv") Do If Not Exist "%destfolder%%%~nxf.mpg"
(请注意,文件夹路径仍应存储而不包含双引号,以便在复杂表达式中正确评估它们。)