2012-02-23 143 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