經過這麼多年,你會認爲我已經完成了某些類型的Windows批處理文件。但你會錯的。我正在更新批處理文件並遇到以下聲明:Windows TASKKILL語法問題
TASKKILL /F /FI "WINDOWTITLE eq SIM RH*" /IM perl.exe
爲什麼/ FI和/ IM?這兩個條款合起來了嗎?如果我離開/ IM,正確的流程會被殺死。
唯一有意義的方法是如果它們結束並只殺掉那個帶有窗口標題的任務並且是perl.exe任務。
經過這麼多年,你會認爲我已經完成了某些類型的Windows批處理文件。但你會錯的。我正在更新批處理文件並遇到以下聲明:Windows TASKKILL語法問題
TASKKILL /F /FI "WINDOWTITLE eq SIM RH*" /IM perl.exe
爲什麼/ FI和/ IM?這兩個條款合起來了嗎?如果我離開/ IM,正確的流程會被殺死。
唯一有意義的方法是如果它們結束並只殺掉那個帶有窗口標題的任務並且是perl.exe任務。
是的,他們被添加!
/IM
將殺死所有任務用不同的工藝標識
/FI
應用過濾器了這一點。你可以用類似的方法測試:
@echo off
for /L %%i in (1,1,5) do start "%%i" cmd.exe
timeout /t 3
taskkill /F /FI "WindowName ne 3" /IM cmd.exe
這應該給你1個命令提示符,標題爲3.所有其他的將被關閉。
改變ne
到eq
只能與冠軍3
離開你1, 2, 4, 5
和yourBatch.bat
是關閉命令提示符。給定的/FI "WINDOWTITLE eq SIM RH*"
選項將通過從SIM RH
開始的窗口標題過濾進程。 reference for taskkill
指定如果給出這樣的過濾器,則/IM
選項接受通配符*
。
不言而喻的事實是,添加一個過濾器而忽略了/IM
似乎意味着/IM *
。
您可以使用以下命令驗證此行爲,該命令將在兩個單獨的窗口中打開常規shell和PowerShell,然後通過指定窗口標題過濾器來殺死這兩個窗口。
start "testp1" cmd && start "testp2" powershell && taskkill /F /FI "WINDOWTITLE eq testp*"
'/ FI'是一個根據'taskkill /?'的過濾器,所以這應該是隻殺死perl.exe窗口,標題爲'SIM RH'我猜... – geisterfurz007