1

У меня есть этот пакетный скрипт для передачи некоторых значений в RaspberryPi, и теперь я хочу сохранить ответ в переменной. Я хочу этого, так как пока будет два возможных ответа: один в порядке, а другой в спящем режиме.

Когда он получит ответ 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 в переменную?

UPDATE @LotPings после попытки изменить ваш скрипт (https://superuser.com/a/1228066/746701), он запускает программу wget.exe, правильно делает запрос (я проверил apache2 access.log), но все равно не ' t сохранить ответ в этой переменной, вы можете увидеть ошибку о переменной 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

2 ответа2

0

Что ж, из вашего кода ясно, что вам нужен пакет, а не сценарий 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
)
0

LotPings показал один способ получить выходные данные программы и поместить их в переменную.  Другой способ - записать вывод программы в файл, а затем прочитать его в переменную с помощью set /p variable_name= .  Например,

your_WGET_command > wget.out  &&  set /p WebResponse= < wget.out

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .