Windows 如何在不创建新窗口的情况下从批处理文件调用批处理文件?
我需要处理一些音频文件。每个文件都必须经过多个连续步骤,为此我编写了一个批处理文件。但是为了提高速度,我希望文件夹中的所有文件都能并行处理。所以我编写了另一个批处理文件,在循环中调用第一个批处理文件。但是当我这样做的时候,我最终得到了多个命令窗口,即使批处理文件已经关闭,这些窗口仍然保持打开状态 按照优先顺序,我如何(a)完全不打开车窗,或(b)最小化车窗,然后在完成后关闭车窗;或(c)打开窗户,完成后关闭Windows 如何在不创建新窗口的情况下从批处理文件调用批处理文件?,windows,batch-file,Windows,Batch File,我需要处理一些音频文件。每个文件都必须经过多个连续步骤,为此我编写了一个批处理文件。但是为了提高速度,我希望文件夹中的所有文件都能并行处理。所以我编写了另一个批处理文件,在循环中调用第一个批处理文件。但是当我这样做的时候,我最终得到了多个命令窗口,即使批处理文件已经关闭,这些窗口仍然保持打开状态 按照优先顺序,我如何(a)完全不打开车窗,或(b)最小化车窗,然后在完成后关闭车窗;或(c)打开窗户,完成后关闭 for %%I in (*.mp3) DO ( start convert-mp
for %%I in (*.mp3) DO (
start convert-mp3-to-m4b.bat "%%I"
)
我通过
start cmd/c convert-mp3-to-m4b.bat“%%I”/B成功实现了(c),但这更多的是运气,而不是判断。在@Stephan的帮助下,我最终实现了以下目标:
for %%Z in (*.mp3) DO (
start "converting-audio" /min cmd /c convert-mp3-to-m4b.bat "%%Z"
)
这将启动最小化窗口,并在处理后关闭它们。我也为max
技巧感到高兴,尽管我不得不稍微修改一下代码。如果对其他人有帮助,我的脚本现在如下所示:
@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
这一次处理四个文件,效果很好。您正在询问答案-使用CALL
关键字:CALL convert-mp3-to-m4b.bat“%%I”
还要检查bat是否使用直接退出命令,并将其更改为EXIT/b
@npocmakaCALL
不会并行运行进程…然后启动“”/b convert-mp3-to-m4b.bat“%%I”
start/min
运行它们。注意:如果您的.mp3
太多,您的计算机可能会耗尽资源。请参阅一次运行max
文件。看起来不错。我认为最好使用START/B,将stdout和stderr重定向到NUL,而不是START/MIN。