批处理脚本中的 wget.exe,将结果保存到变量

批处理脚本中的 wget.exe,将结果保存到变量

我有这个批处理脚本来将一些值推送到 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
)

相关内容