我想运行一个命令,如果它在1秒内没有完成,我希望它返回31744。
示例:
C:\Users\Admin\Desktop\my_django_stuff>mycommand < input.txt > output txt
timeout /t 1
这给了我一个语法错误,如果我的命令的运行时间是无限的,那么它在1秒后也不会停止。
答案 0 :(得分:1)
这是一个可能的解决方案:
@echo off
start "custom" mycommand < input.txt > output txt
timeout /t 1
taskkill /FI "WINDOWTITLE eq custom" /FI "IMAGENAME eq mycommand" /f | findstr /c:"PID" >nul
if errorlevel 1 (
echo Task was killed!
pause>nul
exit /b 0
) else (
echo The task was killed successfully! Will exit with code your_custom_code
pause>nul
exit /b your_custom_code
)
现在,您确定程序已终止( f 已强制终止)。
请注意,这里我们使用timeout
代替ping
,因为它肯定会持续不到1/4秒。因此,taskkill
会持续一会儿,因此您肯定会有超过1秒的时间。
答案 1 :(得分:1)
start "UniqueWindowTitle" mycommand < input.txt > output txt
ping -n 2 localhost >nul
taskkill /FI "WINDOWTITLE eq UniqueWindowTitle" /f |find " PID " && (
echo task was killed.
exit /b 31744
) || (
echo there was no task to kill.
echo it terminated in time.
)
不幸的是,taskkill
不会返回有用的错误级别,因此我们解析输出(如果任务被杀死,则为SUCCESS: Sent termination signal to the process with PID 12345
。
根据您的实际应用,您可能需要或不需要/f
参数(“ Force”)
我将timeout
替换为ping-n 2 localhost
,因为timeout 1
实际上并不等待1秒,而是等到“下一秒”到来-在极端情况下可能只有几毫秒。 >
此外,我并没有寻找“ SUCCESS”,而是寻找了“ PID”来保持其语言独立性。 (当找不到该进程时,没有PID
。