微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何监视小于或大于值的数字列表,并在该值在范围内时执行操作?

如何解决如何监视小于或大于值的数字列表,并在该值在范围内时执行操作?

我正在尝试编写一个 win 10 批处理脚本,该脚本监视 csv 中的数字输出,如 111.07 112.56 123.66 等 5 行。输出每 60 秒发生一次。 (可选地,我可以将其存储在 log.txt 中并在脚本中调用它) 此外,我希望输出数字为绝对值而不带小数。 然后执行小于或等于或大于 ...(LEQ 100GEQ 140 -> 对吗?)。 Ifthen 范围内立即重新启动 shutdown -r -f -t 00 else go to :start

我不得不承认我不知道我在做什么,我尝试过的一切都会立即退出脚本,即使在每一步后暂停或超时也是如此。

编辑:这是我目前所拥有的。

:start
FOR /F "tokens=* USEBACKQ" %%i IN ('nvidia-smi.exe --format=csv,nounits,noheader --query-gpu=power.draw') do (SET var=%%i%)
echo %%var%
if %%var% LEQ 100 (echo reboot) else (goto :start)
If %%var% GEQ 140 (echo reboot) else (goo :start) 

第一行应该将 ('nvidia-Smi.exe ....') 的 5 行输出存储在变量 var 中。

Nvidia-smi.exe 的输出

117.00
123.34
116.77
128.65
119.45

第二个应该进行 if else 比较并重新启动(现在只是 echo)我不明白如何将 if else 构建到 for 循环中。 Nvidia-smi.exe 似乎没有被执行而只是被打印,但是当我在 cmd 中运行该命令时它会执行。 cvs、Mounties、noheader 之间的逗号被删除 我也不明白如何不在 if leq ... else ....

输出

C:\Users\admin\Desktop\monitor.bat

C:\Users\admin>FOR /F "tokens=* USEBACKQ" %i IN ('nvidia-smi.exe --format csv nounits noheader --query-gpu power.draw') do (SET var=%i )

C:\Users\admin>(SET var=nvidia-smi.exe --format csv nounits noheader --query-gpu power.draw )

C:\Users\admin>echo %var
%var
Syntaxerror.

C:\Users\admin>    if %varstart)

解决方法

谢谢@Mofi,

通过您的演示,我设法做到了。

:begin
@echo off
Timeout 57
if exist log.txt del log.txt 
nvidia-smi.exe --format=csv,nounits,noheader --query-gpu=power.limit --filename=log.txt
for /F "tokens=* delims=" %%I in (log.txt) do for %%J in (%%I) do if %%~nJ LEQ 100 (echo %%J is less or equal 100 && shutdown /r /f /t 60) else if %%~nJ GEQ 140 (echo %%J is greater or equal 140 && shutdown /r /f /t 60) else (echo %%J% is between 100 and 140)
goto :begin

输出:

117.00 is between 100 and 140
148.00 is greater or equal 140
126.00 is between 100 and 140
96.00 is Less or equal 100
127.00 is between 100 and 140

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。