如何在不创建新窗口的情况下从批处理文件中调用批处理文件?

时间:2018-03-02 10:43:15

标签: windows batch-file

我需要处理一些音频文件。每个文件都必须经过多个连续步骤,我已经为此编写了一个批处理文件。但我想要并行处理文件夹中的所有文件,以提高速度。所以我写了另一个批处理文件,它在一个循环中调用第一个。但是当我这样做时,我最终得到了多个命令窗口,即使批处理文件已关闭,它也会保持打开状态。

按照优先顺序,我怎样才能(a)根本不打开窗户,或(b)将窗户最小化,然后在完成时关闭;或(c)打开窗户,然后在完成时关闭。

for %%I in (*.mp3) DO (
    start convert-mp3-to-m4b.bat "%%I"
)

我设法通过start cmd /c convert-mp3-to-m4b.bat "%%I" /B实现了(c),但这更多的是运气而非判断。

1 个答案:

答案 0 :(得分:1)

在@Stephan的帮助下,我最终得到了这个:

for %%Z in (*.mp3) DO (
    start "converting-audio" /min cmd /c convert-mp3-to-m4b.bat "%%Z"
)

这会使窗口最小化,并在处理后关闭它们。我也很高兴max <n>技巧,虽然我不得不调整一下代码。如果它对其他人有帮助,我的脚本现在看起来像这样:

@echo off
setlocal enabledelayedexpansion
set count=0
set max=4
for %%Z in (*.mp3) DO (
    call :loop
    start "converting-audio" /min cmd /c convert-mp3-to-m4b.bat "%%Z"
)

goto :eof    

:loop
for /f "tokens=* USEBACKQ" %%G IN (`tasklist /fi "windowtitle eq converting-audio" ^| find "cmd.exe" /C`) do ( SET "count=%%G" )
if !count! GEQ !max! call :loop

一次处理四个文件,效果非常好。