我想在一个文件夹中自动执行几个bdf-文件。但是,我只能在当时运行我的应用程序的一个实例(由于我的应用程序许可证)。
我希望我的代码如下所示:
对于文件夹中的所有*.bdf文件,请执行以下操作:如果应用程序正在运行,请检查应用程序是否正在运行,如果没有运行,则启动index.bdf (与默认应用程序一起运行),然后再转到“检查是否”,再次继续FOR -循环。
我的代码如下所示:
@ECHO OFF
TITLE AutorunNastran
FOR %%f IN (*.bdf) DO (
:loopbody
tasklist /nh /fi "imagename eq nastran.exe" | find /i "nastran.exe" >nul && (
echo Nastran is running
TIMEOUT 5
goto loopbody
) || (
echo Nastran is not running, a new bdf-file will be executed
START %%f
)
)
PAUSE第一个.bdf文件将被执行,但是当程序第二次和第三次通过i-语句运行时,我的变量index.bdf=%%f似乎被遗忘了。
我对批处理文件还不熟悉,但我尝试在google上找到答案,并认为也许我需要这个命令"Setlocal EnableDelayedExpansion",但到目前为止,它还没有对我起作用。如果能提供一些帮助,我们将不胜感激!
发布于 2015-07-05 09:49:07
在循环中执行goto会取消循环。试着
@echo off
setlocal enableextensions disabledelayedexpansion
set "app=nastran.exe"
for %%a in (*.bdf) do (
cmd /q /c"(for /l %%z in (0) do (tasklist /nh /fi "imagename eq %app%" | find /i "%app%" && timeout 5 || exit /b)) >nul 2>&1"
start "" "%%~a"
)在这里,循环被移动到一个单独的cmd实例,该实例将保持一个无限循环,直到在tasklist中找不到该应用程序。
https://stackoverflow.com/questions/31228791
复制相似问题