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