如何讓.BAT文件在完成後自行刪除?我有一個簡單的bat文件終止一個進程。我想要.BAT文件自己刪除。如何使.BAT文件在完成後自行刪除?
回答
@ECHO OFF
SETLOCAL
SET someOtherProgram=SomeOtherProgram.exe
TASKKILL /IM "%someOtherProgram%"
ECHO "This script will now self-destruct. Please ignore the next error message"
DEL "%~f0"
注意,DEL線最好是你打算裏面的批處理文件執行的最後一件事情,否則你的運氣了:)
這將打印出一個醜陋的錯誤消息,但它是良性的,而且這種方式的代碼稍微不那麼混亂。如果您非常關心擺脫錯誤消息,請參閱dbenham's answer以擺脫它。
您能解釋這一點嗎? 什麼是someotherprogram.exe和你在裏面打什麼? – 2011-10-10 21:05:11
@Richard:'SomeOtherProgram.exe'可以更改爲任何程序。例如'notepad.exe'。這是將被殺死的程序,並且該程序的作用並不重要 - 該批處理文件不關心。它只是使用'TaskKill'來殺死具有該exe名稱的任務。這是否清除它?如果是這樣,你認爲它需要添加到答案?如果沒有,請更詳細地解釋你理解哪些部分,哪些不理解。 – 2011-10-11 00:17:38
謝謝你的回覆@Merlyn。我的錯,我沒有仔細閱讀這個問題。我想知道爲什麼你需要殺死一個進程來刪除一個蝙蝠本身。 :) – 2011-10-11 00:28:28
您沒有提到操作系統,但是如果這是在Windows XP Professional上並且您具有適當的權限,則可以讓批處理文件安排一次性Windows計劃任務以便稍後刪除該文件。使用schtasks
命令,記錄爲here。
否則,您通常無法刪除正在執行的文件,因爲這有可能造成各種不良情況。此外,試圖刪除正在使用的可執行文件被任何數量的防病毒程序視爲非常可疑的行爲,所以很可能您會遇到這些問題。
實際上,有一個令人驚訝的簡單方法可以讓批處理文件自己刪除,而不會出現無需特殊權限的錯誤。請參閱[我的答案](http://stackoverflow.com/a/20333152/1012053) – dbenham 2013-12-06 15:26:52
就在您的批處理文件的最後一行添加此命令
Del batch_file_name.bat
batch_file_name.bat
是您的批處理文件的名稱
乾杯
它不起作用。 – 2011-10-10 21:03:36
* @ Ricardo Polo *不,它不會工作,因爲進程被鎖定,所以除非PID被釋放,否則文件不會被刪除。我實際上認爲這就是上面討論的內容,但是*哈尼魯丁*似乎錯過了這個! – CriticalPoint 2015-10-26 16:37:04
的Merlyn摩根 - 格雷厄姆回答設法刪除運行批處理腳本,但它會生成以下錯誤消息:「批處理文件找不到」這不是ap如果控制檯窗口在腳本終止時關閉,則會出現問題,因爲消息會以非常快的速度閃爍以至於沒有人會看到它。但是如果控制檯在腳本終止後仍保持打開狀態,則錯誤消息是非常不可取的。
John Faminella有一個正確的想法,即需要另一個進程清理刪除批處理文件,而不會出錯。安排任務可以工作,但有一個更簡單的方法:使用START在同一控制檯內啓動新的刪除進程。進程啓動和執行需要時間,所以父腳本有機會在刪除發生之前乾淨地終止。
start /b "" cmd /c del "%~f0"&exit /b
更新2015-07-17
我發現了另一個真正漂亮的辦法有一個批處理腳本刪除自身,而不會產生任何錯誤消息。該技術在http://www.dostips.com/forum/viewtopic.php?f=3&t=6491
取決於GOTO(某些俄羅斯人發現),在英語中描述的一個新發現的行爲綜上所述,(GOTO) 2>NUL
行爲就像EXIT /B
,但它允許在調用者的情況下級聯命令的執行!
因此,所有你需要的是
(goto) 2>nul & del "%~f0"
我喜歡你的第二個解決方案。第一個很可能會工作得很好,但我不確定如果'start'在當前的批處理腳本解釋器完成之前設法完成它的工作,那麼它是不能保證工作的。我假設如果進程調度程序運行正常或者系統沒有負載過重,任何競爭條件都不太可能成爲問題,所以它可能只是一個挑剔的問題。 – 2016-07-31 05:49:37
(和「保證工作」,我的意思是保證避免錯誤信息) – 2016-07-31 05:57:20
@ MerlynMorgan-Graham - 絕對是一個競爭條件,所以你在技術上是正確的。但是我很難想象一個時機倒轉的情景。這可能是一個有趣的項目,試圖設計一個失敗 – dbenham 2016-07-31 11:53:23
你可以做@ Merlyn的aswer
@ECHO OFF
SETLOCAL
SET someOtherProgram=SomeOtherProgram.exe
TASKKILL /IM "%someOtherProgram%"
DEL "%~f0"
現在做一個VBScript與此編碼並將其保存爲hidden.vbs,這VBScript中會隱藏批次文件的窗口。
set w = CreateObject(「WScript.Shell」)
W.Run chr(34) & 「%userprofile%\desktop\the_batch_file.bat」 & chr(34), 0
set w= Nothing
然後讓批處理文件運行此VBScript中
@ECHO OFF
SETLOCAL
SET someOtherProgram=SomeOtherProgram.exe
TASKKILL /IM "%someOtherProgram%"
start "path to hidden.vbs"
DEL "%~f0"
這將隱藏批處理文件刪除它使得錯誤信息不可能看到了。
你也可以直接的DEL「%〜F0」輸出爲NULL,像這樣的輸出...
@ECHO OFF
SETLOCAL
SET someOtherProgram=SomeOtherProgram.exe
TASKKILL /IM "%someOtherProgram%"
DEL "%~f0" > NUL
- 1. 如何刪除使用bat文件
- 2. 執行完成後刪除自身文件夾
- 3. 文件完成寫入後處理文件Windows命令行.bat
- 4. PHP腳本完成後刪除文件
- 5. 如何在python中完成測試後刪除測試文件?
- 6. 如何在完成上傳後刪除雜項臨時文件?
- 7. 如何在c#中安裝完成後刪除文件?
- 8. 上傳完成後如何從目錄中刪除文件?
- 9. 單元測試完成後如何刪除圖像文件?
- 10. 使用.bat在未知路徑自刪除文件
- 11. 如何使用batch(.bat)腳本給出行號,刪除一行文本文件?
- 12. 如何在自動成功執行.bat文件後關閉瀏覽器
- 13. DownloadManager在完成時刪除文件
- 14. jQuery ajax後完成/成功/刪除後
- 15. 如何用.bat文件從輸出中刪除一行?
- 16. 自動完成刪除值
- 17. 從臨時文件流,然後刪除完成後?
- 18. Django StreamingHttpResponse在用戶完成下載後刪除文件
- 19. 閱讀完成後,在FileSystem API中刪除文件?
- 20. 如何在Vim中自動完成後自動刪除預覽窗口?
- 21. TFS生成代理在生成後運行.bat文件
- 22. 如何生成臨時Zip文件,然後在下載後自動刪除它?
- 23. 刪除行audioplayer完成
- 24. 如何在Windows安裝程序安裝完成後刪除文件?
- 25. 在NSOperationQueue完成後刪除動畫UIImageView
- 26. 在bat文件中運行bat文件
- 27. 如何將刪除自動完成文本交叉跡象
- 28. 如何刪除/更改JQuery UI自動完成助手文本?
- 29. 如何讓.bat文件在刪除內容時不會問你?
- 30. 如何在閱讀文件後刪除文件中的行?
所以,你想一個批處理文件,不顯示任何窗口,殺死處理完成後自行刪除。只是出於好奇。爲什麼? – 2010-05-22 17:31:48