Batch file 如何使用输入/输出文件启动.exe文件并批量设置时间限制?

Batch file 如何使用输入/输出文件启动.exe文件并批量设置时间限制?,batch-file,Batch File,在windows命令提示符中,当我想使用输入/输出文件运行程序时,我总是使用如下批处理命令:test.exeoutput.out。 (test.exe是程序名,input.it是输入文件名,output.out是输出文件名) 但是,如果我使用此命令,我无法为该程序设置时间限制(即,我无法强制该程序在一段时间后退出)。 那么我应该使用什么命令来实现这一点呢?谢谢您的帮助。您可以使用以下命令: 在这里,它在5秒后被杀死。您可以以秒为单位指定任何持续时间。您可以使用以下命令: start "" /b

在windows命令提示符中,当我想使用输入/输出文件运行程序时,我总是使用如下批处理命令:test.exeoutput.out。 (test.exe是程序名,input.it是输入文件名,output.out是输出文件名)

但是,如果我使用此命令,我无法为该程序设置时间限制(即,我无法强制该程序在一段时间后退出)。 那么我应该使用什么命令来实现这一点呢?谢谢您的帮助。

您可以使用以下命令:

在这里,它在5秒后被杀死。您可以以秒为单位指定任何持续时间。

您可以使用以下命令:

start "" /b cmd /c "test.exe <input.in >output.out"
timeout /t 10
tasklist | find "test.exe" >nul && taskkill /f /im test.exe
在这里,它在5秒后被杀死。您可以以秒为单位指定任何持续时间。

start”“/b cmd/c“test.exe output.out”
start "" /b cmd /c "test.exe <input.in >output.out"
timeout /t 10
tasklist | find "test.exe" >nul && taskkill /f /im test.exe
超时/t 10 任务列表|查找“test.exe”>nul&&taskkill/f/im test.exe
在未连接到当前控制台的cmd实例中启动程序,等待10秒钟,如果程序仍在任务列表中,则将其杀死

编辑-更新以处理注释中指出的案例

@echo off
    setlocal enableextensions

    start "" /b cmd /c "test.exe <input.in >output.out"

    call :timeoutProcess "test.exe" 10
    if errorlevel 1 (
        echo Program has been killed
    ) else (
        echo Program has ended in time
    )

    exit /b


:timeoutProcess process timeout
    for /l %%t in (1 1 %~2) do (
        timeout.exe /t 1 >nul
        tasklist | find "%~1" >nul || exit /b 0
    )
    taskkill /f /im "%~1" >nul 
    exit /b 1
@echo关闭
setLocalEnableExtensions
启动“/b cmd/c”test.exe output.out”
调用:timeoutProcess“test.exe”10
如果错误级别为1(
echo程序已被终止
)否则(
echo程序已及时结束
)
退出/b
:timeoutProcess进程超时
对于/l%%t in(11%~2)do(
timeout.exe/t 1>nul
任务列表|查找“%~1”>nul | |退出/b 0
)
taskkill/f/im“%~1”>nul
退出/b 1
start”“/b cmd/c“test.exe output.out”
超时/t 10
任务列表|查找“test.exe”>nul&&taskkill/f/im test.exe
在未连接到当前控制台的cmd实例中启动程序,等待10秒钟,如果程序仍在任务列表中,则将其杀死

编辑-更新以处理注释中指出的案例

@echo off
    setlocal enableextensions

    start "" /b cmd /c "test.exe <input.in >output.out"

    call :timeoutProcess "test.exe" 10
    if errorlevel 1 (
        echo Program has been killed
    ) else (
        echo Program has ended in time
    )

    exit /b


:timeoutProcess process timeout
    for /l %%t in (1 1 %~2) do (
        timeout.exe /t 1 >nul
        tasklist | find "%~1" >nul || exit /b 0
    )
    taskkill /f /im "%~1" >nul 
    exit /b 1
@echo关闭
setLocalEnableExtensions
启动“/b cmd/c”test.exe output.out”
调用:timeoutProcess“test.exe”10
如果错误级别为1(
echo程序已被终止
)否则(
echo程序已及时结束
)
退出/b
:timeoutProcess进程超时
对于/l%%t in(11%~2)do(
timeout.exe/t 1>nul
任务列表|查找“%~1”>nul | |退出/b 0
)
taskkill/f/im“%~1”>nul
退出/b 1

能否在windows计算机上安装其他工具,如cygwin?
timeout
命令将很好地解决您的问题。您能否在windows计算机上安装其他工具,如cygwin?
timeout
命令将优雅地解决您的问题。另一个问题:使用您的命令时,超时将始终持续10秒,但程序可以提前结束。那么,当程序结束时,我可以立即终止超时过程吗?@skyvn:更多的逻辑需要更多的代码。包括使用示例。另一个问题:当使用命令时,超时将始终持续10秒,但程序可以提前结束。那么,当程序结束时,我可以立即终止超时过程吗?@skyvn:更多的逻辑需要更多的代码。包括使用示例。