for-loop - 批处理文件在For循环中的if/else语句中设置变量

标签 for-loop batch-file

我正在尝试创建一个批处理文件,为每个文件生成一个自定义 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/

相关文章:

c++ - 递归重启循环 (C++)

python - 读取并打印字符串 x 次

在 C 中创建带有星号的金字塔的边界

Windows命令行字符串解析: folder and filename in string

php - 如何将 Windows 批处理脚本变量传递给管道命令

php - 使用插入 PDO 检索值

javascript - for循环中的Object.defineProperty

batch-file - 如何使用批处理文件向Everyone 组授予文件夹权限

windows - 我想创建一个批处理脚本,它将按修改日期的顺序打印文件夹中的所有文件

android - CMD:我的 Android 设备使用哪个盘符?