2012-02-23 142 views
1

我寫過一個腳本來刪除一旦exe文件執行後創建的批處理文件,它是用快速bfc編譯的,因爲它不通過它自己來完成,包含源代碼一旦進程是不存在的。問題是它刪除它自己並結束兩個進程,它的self和xxx.exe。我的目標是通過循環檢查每2秒是否存在過程。如果進程不再運行,它會刪除%temp%文件夾中啓用的任何可能文件的h屬性,然後刪除%temp%文件夾中的所有文件。如果是,它會再次檢查是否存在xxx.exe。批處理腳本無法正常工作

@echo off 
start xxx.exe 
:A 
tasklist 2>nul | find "xxx.exe" 1>nul 
if not ErrorLevel 1 (
echo Wscript.Sleep 2000> %temp%\sleep.vbs 
start /w wscript.exe %temp%\sleep.vbs 
del %temp%\sleep.vbs /f /q 
goto A 
) else (
Goto B 
) 
:B 
attrib -h %temp%\*.* 
del %temp%\*.* /f /q 
exit 

P.S 增加,因爲成功的第一次嘗試沒有任何工作轉到B部。 請記住,啓動xxx.exe時,它會使用在%temp%文件夾中創建的批處理文件,所以如果xxx.exe被終止,它仍然可以運行,因此只會保持cmd.exe處於活動狀態。 用於檢查進程是否存在的腳本顯然是不可見的。 啓動的批處理文件提供菜單例如1.執行xxx 2. sddd 。

回答

0

似乎有點奇怪地混合VBScript和批處理腳本,因爲你沒有有效地解決一種技術中的問題。也許,如果您將整個解決方案遷移到VBScript,那麼您將擁有更優雅的解決方案。

Option Explicit 
Const WS_SHOW = 1 
Dim objShell 
Set objShell = CreateObject("WScript.Shell") 
objShell.Run "xxx.exe", WS_SHOW, True 
Dim objFSO 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
objFSO.DeleteFile "xxx.exe" 
+0

謝謝你,會測試,但我寧願爲此批量解決方案。 – 5452 2012-02-23 12:29:33