【发布时间】:2013-05-29 19:51:55
【问题描述】:
我正在尝试创建一个批处理文件,为每个文件生成一个自定义 AVIsynth 脚本。现在,批处理文件设置为从视频文件所在的文件夹中执行。我需要做的是获取文件的创建时间以生成时间码刻录。获取所需的信息没有问题。但是,如果文件是在下午创建的,我需要它在 24 小时内。比如 2pm 需要显示为 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 进行调试。但希望问题很清楚。
【问题讨论】:
-
你试过
if /i "!era!" == "PM" -
谢谢,但这并不能解决我遇到的问题。问题是如果
newth存在于前一个循环中,它不会在else 部分切换回!th!。因此,保持其值与前一次迭代相同。 -
你的操作系统是什么?还有其他几种方法可以打发时间...
-
aaah...在循环开始时设置
set "th="以清除它的值 -
我在 Windows 7 上。我刚刚发现将操作系统时间设置为 24 小时可以解决问题。但是,我希望将文件修改时间缩短到秒,但只能让 cmd 显示小时和分钟。
标签: for-loop batch-file