【问题标题】:Windows Batch Script - FOR DO one command at a timeWindows 批处理脚本 - FOR DO 一次执行一个命令
【发布时间】:2013-12-16 06:43:02
【问题描述】:

我制作了一个批处理脚本来查找子目录中的 .flv 和 .mp4 文件,并在该子文件夹中创建一个同名的模板 .srt 文件。

问题是,我使用 FOR DO 循环,它似乎吐出命令的速度太快以至于它不可靠..

代码如下:

for /R %%f in (*.flv) do (
cd  %%~nf
echo.1>> "%%~nf".srt
echo.00:00:00,500 --^> 00:00:03,500>> "%%~nf".srt
echo.%%~nf>> "%%~nf".srt
echo.>> "%%~nf".srt
echo.2>> "%%~nf".srt
echo.00:00:00,000 --^> 00:00:00,000>> "%%~nf".srt
echo.%%~nf>> "%%~nf".srt
cd..
)
for /R %%f in (*.mp4) do (
cd  %%~nf
echo.1>> "%%~nf".srt
echo.00:00:00,500 --^> 00:00:03,500>> "%%~nf".srt
echo.%%~nf>> "%%~nf".srt
echo.>> "%%~nf".srt
echo.2>> "%%~nf".srt
echo.00:00:00,000 --^> 00:00:00,000>> "%%~nf".srt
echo.%%~nf>> "%%~nf".srt
cd..
)

如果一切顺利.. 对于 ./FILE1/FILE1.mp4 它会生成 ./FILE1/FILE1.srt 包含:

1
00:00:00,500 --> 00:00:03,500
FILE1

2
00:00:00,000 --> 00:00:00,000
FILE1

它只是针对前几个文件,然后这个过程似乎太快了,我在错误的 srt 文件中得到双打和错误的标题。

似乎 do ( ... ) 循环同时吐出所有命令。我什至尝试使用 PING 命令减慢它的速度,甚至尝试使用 GOTO 命令将工作分解为多个步骤,但没有运气。

我怎样才能让它一次执行一个命令,同时仍然能够使用 %%~nf 来创建和标记 .srt 文件??

非常感谢任何帮助!

【问题讨论】:

    标签: windows loops batch-file for-loop


    【解决方案1】:

    “可能”您在嵌套子目录或目录名称中的空格以及您的 cd %~nf cd .. 逻辑方面存在某种问题。更改为cd "%~dpf" 以更改为文件所在的目录。或者更好的是,不要更改目录并在每个文件访问中使用完整路径。

    for /R %%f in (*.flv *.mp4) do (
        echo(1
        echo(00:00:00,500 --^> 00:00:03,500
        echo(%%~nf
        echo(
        echo(2
        echo(00:00:00,000 --^> 00:00:00,000
        echo(%%~nf
    ) > "%%~dpnf.srt"
    

    【讨论】:

    • +1,这正是我会做的,除了不需要内括号。抛弃它们,并将重定向放在右外括号之后
    • @dbenham:改变了。最初我试图在 OP 问题中保留echo. sintax。在这种情况下,为了让它工作,我必须使用内括号。
    • 太完美了!!做对了会不会很累?? =D 感谢大家! .. 我现在有另一个障碍要攀登,所以我觉得最好将它作为一个单独的问题发布。再次感谢!!
    【解决方案2】:

    这应该可行:

    @echo off
    for /F "delims==" %%f in ('dir /s /b /o:gn *.flv *.mp4') DO ( 
    echo.1> "%%~dpnf.srt"
    echo.00:00:00,500 --^> 00:00:03,500>> "%%~dpnf.srt"
    echo.%%~nf>> "%%~dpnf.srt"
    echo.>> "%%~dpnf.srt"
    echo.2>> "%%~dpnf.srt"
    echo.00:00:00,000 --^> 00:00:00,000>> "%%~dpnf.srt"
    echo.%%~nf>> "%%~dpnf.srt"
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 2011-12-15
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 2016-04-10
      相关资源
      最近更新 更多