我正在尝试创建一个批处理文件,为每个文件生成一个自定义 AVIsynth 脚本。现在,批处理文件设置为从视频文件所在的文件夹内执行。我需要做的是获取文件的创建时间以生成时间码烧录。我可以毫无问题地获取所需的信息。但是,如果文件是在下午创建的,我需要它在 24 小时内创建。例如,下午 2 点需要显示为 14 点。
我有一个有效的 if 语句,它创建一个 newth
变量,如果需要的话,该变量会加 12。但是,如果不需要它,该变量仍然存在。在循环的每次后续迭代中,变量都不会更改。
我的例子。我有两个文件,第一个是下午 2 点创建的,另一个是中午 12 点创建的。首先读取 2pm 文件,newth
变量变为 14。到目前为止一切顺利。在下一个文件中,newth
变量应变为 12,但仍保留为 14。如何解决此问题?
@Echo Off & CLS
SetLocal EnableDelayedExpansion
For /F %%a In ('dir *.mpg /b') Do (
ECHO Processing "%%a"
echo %%~ta
set time=%%~ta
set th=!time:~11,2!
set tm=!time:~14,2!
set era=!time:~17,2!
echo !era!
if "!era!"=="PM" (
if !th! LSS 12 ( set /a newth=!th!+12 )
) else ( set /a newth=!th!)
echo !newth!
echo //AviSynth Test Script >scripts/%%a.avs
echo DirectshowSource^("%%~fa"^)>>scripts/%%a.avs
echo LanczosResize^(720,400^) >>scripts/%%a.avs
echo ShowSMPTE^(^) >>scripts/%%a.avs
ECHO Back to Console
Pause
)
这有点困惑,因为我一直在使用 echo
进行调试。但希望问题已经清楚。
最佳答案
这是使用 Wmic 的方法 - Wmic 适用于 XP pro 及更高版本。
@Echo Off & CLS
SetLocal EnableDelayedExpansion
For /F "delims=" %%a In ('dir *.mpg /b') Do (
ECHO Processing "%%a"
set "file=%cd%\%%a"
set "file=!file:\=\\!"
WMIC DATAFILE WHERE name="!file!" get creationdate|find ".">file.tmp
for /f %%a in (file.tmp) do set dt=%%a
set tm=!dt:~8,2!:!dt:~10,2!:!dt:~12,2!
del file.tmp
echo !tm!
echo //AviSynth Test Script >scripts/%%a.avs
echo DirectshowSource^("%%~fa"^)>>scripts/%%a.avs
echo LanczosResize^(720,400^) >>scripts/%%a.avs
echo ShowSMPTE^(^) >>scripts/%%a.avs
ECHO Back to Console
Pause
)
关于for-loop - 批处理文件在For循环中的if/else语句中设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16822668/