Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 批处理脚本无法正常工作_File_Batch File - Fatal编程技术网

File 批处理脚本无法正常工作

File 批处理脚本无法正常工作,file,batch-file,File,Batch File,我已经编写了一个脚本来删除执行exe文件后创建的批处理文件,该文件是用quick bfc编译的,因为它不是自己完成的,在进程不存在时包含源代码。问题是它删除了self,并结束了self和xxx.exe两个进程。我的目标是让它每2秒钟检查一次流程是否存在。如果进程不再运行,它将删除%temp%文件夹中任何可能启用该进程的文件的h属性,然后删除%temp%文件夹中的所有文件。如果确实存在,则再次执行相同的过程,检查xxx.exe是否存在 @echo off start xxx.exe :A task

我已经编写了一个脚本来删除执行exe文件后创建的批处理文件,该文件是用quick bfc编译的,因为它不是自己完成的,在进程不存在时包含源代码。问题是它删除了self,并结束了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、 添加了goto B部分,因为第一次尝试成功也没有成功。 请记住,当xxx.exe启动时,它将使用在%temp%文件夹中创建的批处理文件,因此,如果xxx.exe终止,它仍将能够正常工作,因此只保留cmd.exe处于活动状态。 用于检查进程是否存在的脚本显然不可见。 启动的批处理文件提供了菜单的功能,例如1。做xxx吗 2.sddd
.

混合使用
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"

谢谢,我会测试,但我更喜欢批量解决方案。