Показать полную графическую версию : [решено] Нужна помощь по StringRegExp
nibble74
23-05-2020, 14:10
Нужна помощь по этому коду.
#include <Array.au3>
$iPID = Run("wmic baseboard get Manufacturer", "", @SW_HIDE, $STDOUT_CHILD)
;$iPID = Run("wmic baseboard get Product", "", @SW_HIDE, $STDOUT_CHILD)
ProcessWaitClose($iPID)
$sOut = StdoutRead($iPID)
;$avArray = StringSplit(StringStripWS('"' & $sOut & '"', 4), @CRLF, 1)
$avArray = StringSplit('"' & $sOut & '"', @CRLF, 1)
_ArrayDisplay($avArray)
$test = StringStripWS($avArray[2], 2) ;2 = удаляет пробельные символы в конце строки
$len = StringLen($test)
MsgBox(0, "Количество символов:", $avArray[2] & $len)
Нужно два варианта:
1. $avArray[2] вся строка.
2. $avArray[2] только первое слово.
Вот со вторым вариантом у меня проблема возникла. Не могу вывести в переменную из $avArray[2] только первое слово.
Может быть использовать метасимволы в StringRegExp, но я не силён в этом.
Или же набросайте какой нибудь другой код скрипта, более подходящий.
Спасибо за внимание.
Нужна помощь по этому коду. »
По этому — не нужна.
Вы пытаетесь грести вилами вместо весла. Wbem превосходно поддерживает автоматизацию:
AutoItSetOption("MustDeclareVars", 1)
Local $oSWbemLocator
Local $oSWbemServicesEx
Local $oSWbemObjectEx
$oSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
$oSWbemServicesEx = $oSWbemLocator.ConnectServer(".", "root\cimv2")
For $oSWbemObjectEx In $oSWbemServicesEx.ExecQuery("SELECT Manufacturer FROM Win32_BaseBoard")
ConsoleWrite($oSWbemObjectEx.Manufacturer & @CRLF)
Next
Exit(0)
Далее напишите словами, что Вы хотите получить.
nibble74
23-05-2020, 16:38
Iska, спасибо за оперативный ответ.
Вот полный командный сценарий:
rem Добавление производителя материнской платы
for /F "skip=1 tokens=*" %%a in ('wmic baseboard get Manufacturer') do if not defined Manufacturer set Manufacturer=%%a
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation" /v Manufacturer /t REG_SZ /d "%Manufacturer%" /f
rem Добавление модели материнской платы
for /F "skip=1 tokens=*" %%b in ('wmic baseboard get product') do if not defined product set product=%%b
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation" /v Model /t REG_SZ /d "%product%" /f
set product=
rem Переименование имени компьютера на номер материнской платы
for /F "skip=1 tokens=1" %%b in ('wmic baseboard get product') do if not defined product set product=%%b
wmic computersystem where name="%computername%" call rename name=%product%
С Manufacturer и Product с помощью вашего кода выше всё понятно.
Как быть с этим:
for /F "skip=1 tokens=1" %%b in ('wmic baseboard get product') do if not defined product set product=%%b
wmic computersystem where name="%computername%" call rename name=%product%
Случалось, что некоторые модели материнских плат в "Product" содержит не одно слово. В результате переименование имени компьютера на номер материнской платы будет невозможен, т.к. имя компьютера не должно содержать пробелов.
Хотелось бы из "Product" выбрать первое слово для переименования компьютера.
nibble74, то есть, мы плавно перешли к пакетным файлам?
Как быть с этим: »
Попробуйте так (не проверялось):
for /F "skip=1 tokens=1 delims=" %%b in ('wmic baseboard get product') do if not defined product set "product=%%b"
if defined product wmic computersystem where name="%computername%" call rename name=%product: =%
Хотелось бы из "Product" выбрать первое слово для переименования компьютера. »
Стоп. Так в приведённом Вами коде первое и должно выбираться. Разве нет?
nibble74
23-05-2020, 23:56
то есть, мы плавно перешли к пакетным файлам? »
Нет нет нет. В моём пакетном файле всё работает так как надо. Просто хотелось реализовать кодами autoit, раз уж решил перенести в Autoit )
Придется наверное прибегнуть к простому варианту
RunWait(@ComSpec & ' /c ........', '', @SW_HIDE)
nibble74, покажите, что в $sOut.
Так дали же пример, просто возьми первое слово:
$oSWbemLocator = ObjCreate (http://www.autoitscript.com/autoit3/docs/functions/ObjCreate.htm)("WbemScripting.SWbemLocator")
$oSWbemServicesEx = $oSWbemLocator.ConnectServer(".", "root\cimv2")
$sManufacturer = ''
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $oSWbemObjectEx In (http://www.autoitscript.com/autoit3/docs/keywords.htm#In) $oSWbemServicesEx.ExecQuery("SELECT Manufacturer FROM Win32_BaseBoard")
$sManufacturer = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($oSWbemObjectEx.Manufacturer, '^([^\h]+).*', '\1')
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
ConsoleWrite (http://www.autoitscript.com/autoit3/docs/functions/ConsoleWrite.htm)($sManufacturer & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@CRLF))
Ну или так:
#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <Array.au3>
$iPID = Run (http://www.autoitscript.com/autoit3/docs/functions/Run.htm)(@ComSpec (http://www.autoitscript.com/autoit3/docs/macros.htm#@ComSpec) & " /C wmic baseboard get Manufacturer", "", @SW_HIDE (http://www.autoitscript.com/autoit3/docs/macros.htm#@SW_HIDE), $STDOUT_CHILD)
ProcessWaitClose (http://www.autoitscript.com/autoit3/docs/functions/ProcessWaitClose.htm)($iPID)
$sOut = StdoutRead (http://www.autoitscript.com/autoit3/docs/functions/StdoutRead.htm)($iPID)
$avArray = StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($sOut, '([^\s]+)', 3)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
_ArrayDisplay (http://www.autoitscript.com/autoit3/docs/libfunctions/_ArrayDisplay.htm)($avArray)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(0, '', $avArray[1] & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@CRLF) & "Количество символов: " & StringLen (http://www.autoitscript.com/autoit3/docs/functions/StringLen.htm)($avArray[1]))
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
nibble74
24-05-2020, 13:16
Creat0R, То что надо было. У меня путаница происходила с StringRegExp )
Всем спасибо за отклик и помощь !
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.