问题描述
||
我有多个应用程序往往需要同时打开,而不是仅依赖于Startup文件夹来同时启动它们(因此,如果一天中的某些时间关闭某些应用程序,我可以重新打开它们) )我创建了一个充满快捷方式的文件夹,其方式类似于Linux的运行级别启动链接。因此,在文件夹中,我具有类似于以下内容的快捷链接:
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\"
它启动第一个链接,但是等待。
解决方法
尝试第一种方法,但是将
/B
从take4ѭ命令中删除。这样,该过程将在新窗口中启动,因此不应使其等待。
使用/ B,它将在同一窗口中启动该过程。因此,如果该过程由于某种原因而阻塞,那么您将无法获得控制权,直到它完成为止。例如,考虑以下批处理文件foo.bat(为此需要睡眠命令,因为我有cygwin,所以它附带了):
echo hi
sleep 5
在命令提示符下,如果您键入
START /B foo.bat
您会注意到,在睡眠完成之前,控件不会返回到命令提示符。但是,如果执行此操作:
START foo.bat
然后控制立即返回(因为foo.bat在新窗口中启动),这就是您想要的。
,dcp的答案通过不带/B
标志的尝试将其指向了正确的方向,但这不是解决方案。显然,START
会采用第一个带引号的字符串,而不管传递给它的参数顺序如何,将其作为新窗口的标题,而不是假定它是可执行文件/命令。因此,在启动“ 4”进程时,它们具有快捷方式链接作为窗口标题,并且起始目录是主批处理文件的工作目录。因此,我将文件更新为批处理文件,结果如下:
@FOR /F \"usebackq delims==\" %%f IN (`dir /b \"S* - *.lnk\"`) DO START /B /I \"TITLE\" \"%%f\"