Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Нужна помощь по StringRegExp (http://forum.oszone.net/showthread.php?t=345284)

nibble74 23-05-2020 14:10 2922280

Нужна помощь по StringRegExp
 
Нужна помощь по этому коду.

Код:

#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, но я не силён в этом.
Или же набросайте какой нибудь другой код скрипта, более подходящий.
Спасибо за внимание.

Iska 23-05-2020 15:01 2922284

Цитата:

Цитата nibble74
Нужна помощь по этому коду. »

По этому — не нужна.

Вы пытаетесь грести вилами вместо весла. 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 2922300

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" выбрать первое слово для переименования компьютера.

Iska 23-05-2020 20:11 2922322

nibble74, то есть, мы плавно перешли к пакетным файлам?

Цитата:

Цитата 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: =%

Цитата:

Цитата nibble74
Хотелось бы из "Product" выбрать первое слово для переименования компьютера. »

Стоп. Так в приведённом Вами коде первое и должно выбираться. Разве нет?

nibble74 23-05-2020 23:56 2922346

Цитата:

Цитата Iska
то есть, мы плавно перешли к пакетным файлам? »

Нет нет нет. В моём пакетном файле всё работает так как надо. Просто хотелось реализовать кодами autoit, раз уж решил перенести в Autoit )

Придется наверное прибегнуть к простому варианту
RunWait(@ComSpec & ' /c ........', '', @SW_HIDE)

Паразит 24-05-2020 12:17 2922391

nibble74, покажите, что в $sOut.

Creat0R 24-05-2020 12:26 2922394

Так дали же пример, просто возьми первое слово:

Код:

$oSWbemLocator    = ObjCreate("WbemScripting.SWbemLocator")
$oSWbemServicesEx = $oSWbemLocator.ConnectServer(".", "root\cimv2")

$sManufacturer = ''

For $oSWbemObjectEx In $oSWbemServicesEx.ExecQuery("SELECT Manufacturer FROM Win32_BaseBoard")
    $sManufacturer = StringRegExpReplace($oSWbemObjectEx.Manufacturer, '^([^\h]+).*', '\1')
Next

ConsoleWrite($sManufacturer & @CRLF)

Ну или так:

Код:

#include <Array.au3>

$iPID = Run(@ComSpec & " /C wmic baseboard get Manufacturer", "", @SW_HIDE, $STDOUT_CHILD)
ProcessWaitClose($iPID)
$sOut = StdoutRead($iPID)

$avArray = StringRegExp($sOut, '([^\s]+)', 3)

If Not @error Then
    _ArrayDisplay($avArray)
    MsgBox(0, '', $avArray[1] & @CRLF & "Количество символов: " & StringLen($avArray[1]))
EndIf


nibble74 24-05-2020 13:16 2922407

Creat0R, То что надо было. У меня путаница происходила с StringRegExp )

Всем спасибо за отклик и помощь !


Время: 23:33.

Время: 23:33.
© OSzone.net 2001-