我正在尝试编写一个win 10批处理脚本,监控CSV 5行中数字的输出,如111。07 112。56 123。66等。输出每60秒发生一次。
(我可以选择将其存储在alog.txt
and call that in the script)在脚本中调用它)
我还希望输出的数字是绝对值而不是小数。
然后输入小于或等于或大于…(LEQ 100
and GEQ 140
-> right?). If<和
GEQ 140
->→对吧?)。If
in range 在范围内
then
immediate立即重新启动shutdown -r -f -t 00
else go to :s其他的
go to :start
again一次。
我必须承认,我不知道我正在做什么,我尝试的一切只是立即退出脚本,即使当做暂停或超时后,每一步。
编辑:这是到目前为止我所知道的。
: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中运行命令时,它执行。删除cvsMountiesnoheader之间的逗号
我也不明白如何不重复自己在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