我有几个应用程序,我倾向于需要同时打开,而不是仅依靠Startup文件夹同时启动它们(所以如果某些应用程序在某些时候关闭,我可以重新打开所有这些应用程序我整天都创建了一个充满快捷方式的文件夹,其方式与Linux的运行级别启动链接类似。所以在文件夹中我有类似的快捷链接:
我创建了一个批处理文件,它将遍历与命名格式匹配的所有链接并启动它们。该批处理文件的内容当前为:
@FOR /F "usebackq delims==" %%f IN (`dir /b "S* - *.lnk"`) DO "%%f"
它将启动我尝试的大部分链接,但有些会启动并等待进程退出,从而阻止进一步打开脚本。 有没有办法在不等待批处理文件中的进程退出的情况下执行快捷方式?或者这是一个失败的原因而我应该寻找一个Powershell解决方案呢?
到目前为止我尝试过的事情:
将内容更改为
@FOR /F "usebackq delims==" %%f IN (`dir /b "S* - *.lnk"`) DO START /B /I "%%f"
它在后台进程中启动命令提示符,但从未实际启动链接的目标。
将内容更改为
@FOR /F "usebackq delims==" %%f IN (`dir /b "S* - *.lnk"`) DO %comspec% /k "%%f"
启动第一个链接,但等待。
答案 0 :(得分:7)
尝试第一种方法,但从/B
命令中取出START
。这样,该过程将在新窗口中启动,因此不应使其等待。
使用/ B,它将在同一窗口中启动该进程。因此,如果该进程由于某种原因而阻塞,那么在完成之前您将无法获得控制权。例如,考虑以下批处理文件foo.bat(你需要睡眠命令,我有cygwin所以它附带):
echo hi
sleep 5
如果键入
,则从命令提示符处START /B foo.bat
你会注意到,在睡眠结束之前,控件不会返回到命令提示符。但是,如果我们这样做:
START foo.bat
然后控制立即返回(因为foo.bat在新窗口中启动),这就是你想要的。
答案 1 :(得分:7)
dcp's answer通过尝试没有/B
标志指向正确的方向,但它不是解决方案。显然START
将把第一个引用的字符串作为新窗口的标题,而不是假设它是可执行文件/命令,而不管传递给它的参数顺序如何。因此,当START
进程启动时,它们将快捷方式链接作为窗口的标题,并且起始目录是主批处理文件的工作目录。所以我将我的文件更新为批处理文件到以下内容并且它可以工作:
@FOR /F "usebackq delims==" %%f IN (`dir /b "S* - *.lnk"`) DO START /B /I "TITLE" "%%f"