Я работаю над сценарием в Windows, чтобы получить системную информацию, я хочу сохранить результат каждой команды в переменной bat, а затем передать их в переменные php.
Вот сценарий, который я пробовал:
for /f "tokens=1 delims=[" %a in ('ver') do SET OS=%a
for /f "skip=1 tokens=1 delims=|" %a in ('wmic os get Name') do SET version=%a
for /f "tokens=2 delims=[" %a in ('ver') do SET kernel= %a
for /f "skip=1 tokens=1 delims= " %a in ('wmic os get osarchitecture') do SET arq=%a
for /f "skip=1 tokens=1 delims= " %a in ('wmic computersystem get numberofprocessors') do SET numero_cpu=%a
for /f "skip=1 tokens=1 delims= " %a in ('wmic cpu get manufacturer') do SET fabricante_cpu=%a
for /f "skip=1 tokens=1,2 delims=" %a in ('wmic cpu get Name') do SET nombre_cpu=%a
for /f "skip=1 tokens=1 delims=" %a in ('wmic cpu get CurrentClockSpeed') do SET frequence_cpu=%a
for /f "skip=1 tokens=1 delims=" %a in ('wmic bios get name') do SET name_bios=%a
for /f "skip=1 tokens=1 delims=" %a in ('wmic bios get version') do SET version_bios=%a
for /f "skip=1 tokens=1 delims=" %a in ('wmic bios get serialnumber') do SET serial_bios=%a
for /f "skip=1 tokens=1 delims=" %a in ('wmic bios get manufacturer') do SET fabricant_bios=%a
for /f "skip=1 tokens=1 delims=" %a in ('wmic NIC get Description') do SET red=%a
for /f "skip=1 tokens=1 delims=" %a in ('wmic SOUNDDEV get productname') do SET audio=%a
for /f "skip=1 tokens=1 delims=" %a in ('wmic PATH Win32_videocontroller GET description') do SET video= %a
ECHO %OS%:%version%:%kernel%:%arq%:%numero_cpu%:%fabricante_cpu%:%nombre_cpu%:%frequence_cpu%:%name_bios%:%version_bios%:%serial_bios%:%fabricant_bios%:%red%audio%:%video%:
Спасибо!
wmic
поведение: каждая строка вывода заканчивается на 0x0D0D0A
вместо обычного 0x0D0A
. Это вызывает проблемы при разборе wmic
вывод с for /F
цикл: даже на вид пустой строка содержит ведущую 0x0D
(возврат каретки) и, следовательно, там идентифицируется первый токен.
Доказательство (примечание сбежало ^,
запятая):
==>for /F "delims=" %g in ('wmic os get caption^, name /value') do @echo 1st="%g"
"st="
"st="
"st="Caption=Microsoft Windows 8.1
"st="Name=Microsoft Windows 8.1|C:\Windows|\Device\Harddisk1\Partition2
"st="
"st="
"st="
==>
Решается с помощью дополнительного (вложенного) цикла, который используется в :getwmic
подпрограмма (подпрограмма, выбранная для ограничения множественного кодирования). В for
параметры цикла
%%g
получить name=value
только линии (см. /value
переключатель и findstr
);%%G
чтобы получить желаемое значение (2-й токен %%H
) и убрать окончание возврат каретки в возвращаемом значении.Передайте два строковых параметра в :getwmic
процедура (ссылка %1
и %2
там):
wmic
запрос (заключенный в двойные кавычки), запрашивающий единственное свойство wmi
класс, например "wmic os get Name"
; version
. Следующий сценарий дает только несколько примеров; все set
команды просто echo
ed для отладки; удалить все echo
не раньше, чем отлаживается. Обратите внимание, что
OS
переменная уже существует; поэтому рассмотрим другое имя (OSx
);set "variable=value"
синтаксис с двойными кавычками, чтобы избежать некоторых символов специального значения в пакетном сценарии, например |
, &
, <
, >
и т.д., и убедитесь, что нет (случайно забытых) конечных пробелов;|
труба сбежала с ^
в for /f ... /value ^|findstr "="')
.Сценарий:
@ECHO OFF >NUL
for /f "tokens=1 delims=[" %%a in ('ver') do echo SET "OSx=%%a"
for /f "tokens=2 delims=[]" %%a in ('ver') do echo SET "kernel=%%a%"
call :getwmic "wmic os get Name" version
for /f "tokens=1 delims=|" %%a in ("%version%") do echo SET "version=%%a%
call :getwmic "wmic os get osarchitecture" arq
call :getwmic "wmic computersystem get numberofprocessors" numero_cpu
call :getwmic "wmic cpu get manufacturer" fabricante_cpu
call :getwmic "wmic cpu get Name" nombre_cpu
call :getwmic "wmic PATH Win32_videocontroller GET description" video
goto :yoursequel
:getwmic
for /F "delims=" %%g in ('%~1 /value ^|findstr "="') do (
for /F "tokens=1* delims==" %%G in ("%%g") do echo set "%~2=%%H"
)
exit /B
:yoursequel
ECHO %OS%:%version%:%kernel%:%arq%:%numero_cpu%:%fabricante_cpu%:%nombre_cpu%:%frequence_cpu%:%name_bios%:%version_bios%:%serial_bios%:%fabricant_bios%:%red%audio%:%video%:
Ресурсы (обязательное чтение):
%~g
, %~1
и т.д. специальная страница) Аргументы командной строки (параметры)|
труба &
, <
и т.д. специальная страница) Перенаправление