我有这个批处理脚本来将一些值推送到 RaspberryPi,现在我想将响应保存到变量中。我想要这个,因为到目前为止将有两种可能的响应:一种是 OK,一种是 SLEEP。
当它得到 SLEEP 响应时,我想运行此命令让计算机进入睡眠模式:
rundll32.exe powrprof.dll,SetSuspendState 0,1,0
批处理脚本如下所示:
@echo off
set totalphysicalmemory=
set loadpercentage=
set freephysicalmemory=
set boottime=
for /f "tokens=1-4 delims=/ " %%i in ("%date%") do (
set dow=%%i
set month=%%j
set day=%%k
set year=%%l
)
set datestr=%month% %day% %year%
FOR /F "tokens=2 delims='='" %%A in ('wmic cpu get loadpercentage /value') do SET loadpercentage=%%A
FOR /F "tokens=2 delims='='" %%A in ('wmic ComputerSystem get TotalPhysicalMemory /value') do SET totalphysicalmemory=%%A
FOR /F "tokens=2 delims='='" %%A in ('wmic OS get FreePhysicalMemory /value') do SET freephysicalmemory=%%A
FOR /f %%a in ('WMIC OS GET lastbootuptime ^| find "."') DO set DTS=%%a
set BOOTTIME=%DTS:~0,4%-%DTS:~4,2%-%DTS:~6,2% %DTS:~8,2%:%DTS:~10,2%
c:\"Program Files (x86)"\GnuWin32\bin\wget.exe "http://192.168.1.40/push.php?loadpercentage=%loadpercentage%&totalphysicalmemory=%totalphysicalmemory%&boottime=%boottime%&freephysicalmemory=%freephysicalmemory%" > wget.out
我将 wget.exe 和其他四个 DLL 复制到 system32 目录中,希望能够让命令在没有完整路径的情况下运行,但它抱怨 libeay32.dll,但该 DLL 存在于 System32 目录中。,我不知道问题是什么..但如果有办法将响应放入变量中,即使使用 wget 的完整路径,就像我的脚本现在一样,它会很完美,现在脚本每 5 分钟运行一次,并且运行良好,但它对 RasPi 的响应没有任何作用。
如何将 wget 的输出保存到变量中?
尝试修改后的脚本后更新@LotPings(https://superuser.com/a/1228066/746701),它运行 wget.exe 程序,正确发出请求(我已经检查过 apache2 access.log),但它仍然没有将响应保存到该变量,您可以看到有关 WebResponse 变量的错误
C:\Ovis>wget.bat
freephysicalmemory=10421416
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = C:\Program Files (x86)\GnuWin32/etc/wgetrc
--2017-07-09 16:04:56-- http://192.168.1.40/push.php?freephysicalmemory=10421416
Connecting to 192.168.1.40:80... conectat.
Cerere HTTP trimisă, se aşteaptă răspuns... 200 OK
Dimensiune: 5 [text/html]
Saving to: `push.php@freephysicalmemory=10421416'
100%[==============================================================================>] 5 --.-K/s in 0s
2017-07-09 16:04:56 (757 KB/s) - `push.php@freephysicalmemory=10421416' saved [5/5]
Environment variable WebResponse not defined
答案1
LotPings显示一种方法是获取程序的输出并将其放入变量中。另一种方法是将程序输出写入文件,然后使用 将其读入变量中。例如,set /p variable_name=
你的 WGET 命令> wget.out && 设置/p WebResponse= < wget.out
答案2
那么从您的代码可以清楚地看出您是在处理批处理,而不是 bash 脚本。
我不知道您是否要安排批处理每 5 分钟运行一次,
因此我加入了一个超时为 300 秒的循环。
:: Q:\Test\2017\07\08\SU_1226953.cmd
@Echo off
Pushd "C:\Program Files (x86)\GnuWin32\bin\"
Set "URL=http://192.168.1.40/push.php?freephysicalmemory"
FOR /F "tokens=2 delims='=" %%A in (
'wmic OS get FreePhysicalMemory /value'
) do SET "freephysicalmemory=%%A
set freephysicalmemory
FOR /F "delims=" %%A in (
' wget.exe "%URL%=%freephysicalmemory%" '
) do Set "WebResponse=%%A"
Set WebResponse
If /i "%WebResponse%" Equ "SLEEP" (
Echo going to sleep now ....
Rem rundll32.exe powrprof.dll,SetSuspendState 0,1,0
)