Windows批处理脚本 - FOR一次执行一个命令

时间:2013-12-16 06:43:03

标签: windows loops batch-file for-loop

我制作了一个批处理脚本来查找子目录中的.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文件?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

“可能”您在目录名称和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 :(得分:0)

这应该有效:

@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"
)