2011-05-26 61 views
6

我有幾個應用程序,我傾向於需要同時打開,而不是僅依靠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" 
    

    它啓動的第一個環節,而是等待。

回答

7

dcp's answer通過在沒有/B標誌的情況下試圖指向正確的方向,但它不是解決方案。顯然,START會將第一個帶引號的字符串作爲新窗口的標題,而不管其傳遞給它的參數的順序如何,而不是假定它是可執行文件/命令。所以當START進程啓動時,他們有快捷鏈接作爲窗口的標題,起始目錄是主批處理文件的工作目錄。所以,我在我的文件,批處理文件更新到下面,它的工作原理:

@FOR /F "usebackq delims==" %%f IN (`dir /b "S* - *.lnk"`) DO START /B /I "TITLE" "%%f" 
7

嘗試第一種方式,而是採取了/B關閉START命令。這樣,該過程將在新窗口中啓動,因此不應導致它等待。

使用/ B,它將在同一窗口中啓動該過程。所以如果這個過程由於某種原因而被阻塞,那麼在它完成之前你不會得到控制權。例如,考慮下面的批處理文件,foo.bat(你需要的睡眠命令,我的cygwin所以它附帶了):

echo hi 
sleep 5 

在命令提示符下,如果鍵入

START /B foo.bat 

您會注意到,直到睡眠結束,控件纔會回到命令提示符。但是,如果我們這樣做:

START foo.bat 

再控制回來立即(因爲foo.bat在新窗口中開始),這是你想要的。

+0

有一點需要注意'START foo.bat'是,如果另一個腳本(說'bar.bat')調用它會一直保持「主動「直到foo.bat完成執行。因此,如果你的'foo.bat'是一個鎖定資源的循環腳本,那麼'bar.bat'將被「使用」並且鎖定資源(即使'bar.bat'被關閉)直到'foo.bat'被關閉。 – Zero 2017-02-27 09:59:36