我认为,在您的案例中需要一个“无限循环”和python文件的结合将使您的CPU过载很多。有一段修改过的代码(只能在单个文件扩展名(*.bat, *.txt)中工作)。请看下面的一些更一般的东西。在@echo off
setlocal EnableExtensions
:start_python_files
start "1st" "test1.py"
start "2nd" "test2.py"
start "3rd" "test3.py"
:check_python_files
call:infinite 1st test1.py
call:infinite 2nd test2.py
call:infinite 3rd test3.py
goto:check_python_files
:infinite
tasklist /FI "WINDOWTITLE eq %1 - %2" | findstr /c:PID > nul
rem findstr /c:PID command added above to confirm that tasklist has found the process (errorlevel = 0). If not (errorlevel = 1).
if %errorlevel% EQU 1 (start "%1" "%2")
好吧,这种方式可能会持续一段时间,所以如果一个文件被关闭(大约2-3秒取决于你的CPU过载)。在
如果不适合你,请通知我。我还没有安装python,也不知道它们打开时是如何命名的:)。在
所以,现在你已经(善意地??)让我解释一下我要求的答案:我启用扩展(setlocal EnableExtensions)来更改call命令,如下所示:CALL command now accepts labels as the target of the CALL. The syntax
is:
CALL :label arguments
来自call /?命令。您应该在新的cmd中键入它以获取更多信息我用start命令指定窗口标题,这样我的代码就可以工作了。在新的cmd窗口中键入start /?。
Icall向其发送参数的infinite子例程(窗口标题和文件名)。{{and}(第二个参数)可以通过
在infinite子例程中,我搜索窗口标题(WINDOWTITLE)等于(eq)以格式化window title - filename。即使它不存在,tasklist也将返回errorlevel值0,并显示消息:INFO: No tasks are running which match the specified criteria.
由于这里PID字符串不存在(如果找到它,它就会存在),我们将findstr放入搜索。如果找到,errorlevel将是0。否则,它将是1。在如果errorlevel是1,则表示找不到该进程,这意味着文件已关闭。因此,我们用发送的参数(start "window title (%1)" "filename (%2)")重新打开它。
因为我们已经call编辑了infinite子例程,在它结束之后,我们将返回到check_python_files子例程来无限地执行上述所有操作,直到用户终止或计算机关机。
正如稍后在chat中讨论的,当我们标准地运行python文件时(使用start "window title"),窗口标题将是python.exe文件的完整路径。我找到了一种修复它的方法:start命令cmd /c。修改后的代码:
^{pr2}$
我刚刚在窗口标题中添加了一个额外的cmd /c(并删除了%2),因为它不需要。在
cmd /c告诉系统运行一个新的cmd,该命令将执行字符串指定的命令,然后它将终止。在
简介:如何运行命令来获取更多信息:call /?
start /?
goto /?
tasklist /?
findstr /?
cmd /?
我建议在一个新的cmd窗口中运行上述操作。在
我真的很抱歉把你弄得一团糟。总之,谢谢你提供了这么好的信息,让我明白我错在哪里。在