Batch file 从批处理文件中执行快捷链接,并删除';不要等待应用程序退出
我有几个应用程序需要同时打开,而不是仅仅依靠启动文件夹来同时启动它们(因此,如果一些应用程序在一天中的某个时间关闭,我可以重新打开所有应用程序),我以类似于Linux运行级启动链接的方式创建了一个充满快捷方式的文件夹。因此,在文件夹中,我有类似以下内容的快捷链接:Batch file 从批处理文件中执行快捷链接,并删除';不要等待应用程序退出,batch-file,shortcut,Batch File,Shortcut,我有几个应用程序需要同时打开,而不是仅仅依靠启动文件夹来同时启动它们(因此,如果一些应用程序在一天中的某个时间关闭,我可以重新打开所有应用程序),我以类似于Linux运行级启动链接的方式创建了一个充满快捷方式的文件夹。因此,在文件夹中,我有类似以下内容的快捷链接: S00-Outlook.lnk S01-记事本+++.lnk S02-Chrome.lnk S03-Skype.lnk 我创建了一个批处理文件,该文件将循环遍历与命名格式匹配的所有链接并启动它们。该批处理文件当前的内容为: @FO
- S00-Outlook.lnk
- S01-记事本+++.lnk
- S02-Chrome.lnk
- S03-Skype.lnk
@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"
- 将内容更改为
@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"
/B
从START
命令中取下。这样,进程将在一个新窗口中启动,因此不应导致它等待
使用/B,它将在同一窗口中启动流程。所以,如果这个过程由于某种原因而受阻,那么在它完成之前,您将无法获得控制权。例如,考虑下面的批处理文件,Fo.BAT(你需要睡眠命令,我有CygWin,所以它是这样的):
如果键入
START /B foo.bat
您会注意到,在睡眠完成之前,控件不会返回到命令提示符。但是,如果我们这样做:
START foo.bat
然后控件立即返回(因为foo.bat在一个新窗口中启动),这就是您想要的。在没有/B
标志的情况下尝试它,指向了正确的方向,但它不是解决方案。显然,START
将第一个带引号的字符串作为新窗口的标题,而不是假定它是可执行文件/命令,而不管传递给它的参数顺序如何。因此,当启动START
进程时,它们将快捷链接作为窗口的标题,并且起始目录是主批处理文件的工作目录。因此,我将我的文件更新为批处理文件,如下所示:
@FOR /F "usebackq delims==" %%f IN (`dir /b "S* - *.lnk"`) DO START /B /I "TITLE" "%%f"
关于
START foo.bat
需要注意的一点是,如果另一个脚本(比如bar.bat
)调用它,它将保持“活动”状态,直到foo.bat
完成执行。因此,如果您的foo.bat
是一个锁定资源的循环脚本,那么bar.bat
将被“使用”并锁定资源(即使“bar.bat”关闭),直到“foo.bat”关闭。