批处理脚本无法正常工作

时间:2012-02-23 11:21:17

标签: file batch-file

我编写了一个脚本,用于删除执行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

1 个答案:

答案 0 :(得分: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"