好的,我正在做的简要说明:我每晚都使用Windows Media Center(Windows 7)录制Jeopardy。然后,我使用Handbrake将.wtv文件转换为.mkv文件,然后将它们传输到我的NAS,以便稍后使用Plex Media Server / Center进行查看。我不是“手动”执行此操作,而是尝试使用批处理文件作为计划任务自动执行此过程。最初,我已经设置了一个脚本,以便我可以右键单击>发送至> convert.bat它将启动Handbrake的命令行界面并转换文件,将输出移动到我的NAS,并删除原始文件(工作得很好)。
现在,我正在做的是将批处理脚本作为计划任务启动,并循环遍历我的“录制电视”目录的内容,并循环遍历任何.wtv文件以转换/移动/删除它们。
问题在于Windows Media Center使用“!”正确命名Jeopardy文件。在他们身上(例如:Jeopardy!_KHQ_2012_12_04_21_12_12.wtv),这完全是我的剧本。 “发送到”批处理文件工作得很好,但当我遍历目录中的* .wtv文件时,它返回所有带有“!”的文件名。剥离出来意味着我不能蹲下来。没有“!”的文件做得很顺利。
提前感谢任何可以让我指出正确方向的人! (如果您碰巧看到任何其他可以改进此脚本的区域,那也很好......)
以下是我尝试使用的基本代码:
@echo off
setlocal ENABLEDELAYEDEXPANSION
SET count=0
SET getFolder=C:\Users\Public\Recorded TV\
SET ripFolder=C:\Rips\
SET putFolder=Z:\Videos\Recorded TV\
FOR %%F IN ("%getFolder%*.wtv") DO (
SET /A count=!count!+1
REM DETERMINE OUTPUT FILENAME
for /f "tokens=5,6,7,8,9,10 delims=\_" %%a in ("%%F") do (
set show=%%a
set station=%%b
set year=%%c
set month=%%d
set day=%%e
set hour=%%f
REM GENERATE OUTPUT NAMING CONVENTION
set output=!show! s!year!e!month!!day! !hour!
)
REM PROCESS WITH HANDBRAKE CLI
"C:\Program Files\Handbrake\HandBrakeCLI.exe" -i "%%F" -t 1 -c 1 -o %ripFolder%!OUTPUT!.mkv -f mkv --deinterlace="fast" --crop 58:60:2:2 --strict-anamorphic -e x264 -q 20 --vfr -a 1 -E faac -B 160 -6 dpl2 -R Auto -D 0 --gain=0 --audio-copy-mask none --audio-fallback ffac3 -x ref=1:weightp=1:subq=2:rc-lookahead=10:trellis=0:8x8dct=0 --verbose=1
REM MOVE CONVERTED FILE TO NAS
copy "%ripFolder%!OUTPUT!.mkv" "%putFolder%"
REM DELETE ORIGINAL
del "%%F"
REM DELETE LOCAL RIP
del "%ripFolder%!output!.mkv"
)
echo %count% files processed
pause
ENDLOCAL
答案 0 :(得分:0)
正如您所知,感叹号在您逃脱之前就会被剥离
这是因为在启用延迟扩展时展开FOR循环变量%%F
,感叹号会尝试扩展变量。
您需要在此处切换延迟扩展,因为使用延迟扩展时变量内容是安全的,但要获得您需要禁用模式的值。
@echo off
setlocal DisableDelayedExpansion
SET count=0
FOR %%F IN ("%getFolder%*.wtv") DO (
set "orgFile=%%F"
SET /A count+=1
REM DETERMINE OUTPUT FILENAME
for /f "tokens=5,6,7,8,9,10 delims=\_" %%a in ("%%F") do (
set show=%%a
set station=%%b
set year=%%c
set month=%%d
set day=%%e
set hour=%%f
setlocal EnableDelayedExpansion
REM GENERATE OUTPUT NAMING CONVENTION
set output=!show! s!year!e!month!!day! !hour!
)
REM PROCESS WITH HANDBRAKE CLI
"C:\Program Files\Handbrake\HandBrakeCLI.exe" -i "%%F" -t 1 -c 1 -o %ripFolder%!OUTPUT!.mkv -f mkv --deinterlace="fast" --crop 58:60:2:2 --strict-anamorphic -e x264 -q 20 --vfr -a 1 -E faac -B 160 -6 dpl2 -R Auto -D 0 --gain=0 --audio-copy-mask none --audio-fallback ffac3 -x ref=1:weightp=1:subq=2:rc-lookahead=10:trellis=0:8x8dct=0 --verbose=1
REM MOVE CONVERTED FILE TO NAS
copy "%ripFolder%!OUTPUT!.mkv" "%putFolder%"
REM DELETE ORIGINAL
del "!orgFile!"
REM DELETE LOCAL RIP
del "%ripFolder%!output!.mkv"
endlocal
)