-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
Нужна помощь по 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, но я не силён в этом.
Или же набросайте какой нибудь другой код скрипта, более подходящий.
Спасибо за внимание.
|
Цитата:
Цитата 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)
Далее напишите словами, что Вы хотите получить.
|
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: =%
Цитата:
Цитата nibble74
Хотелось бы из "Product" выбрать первое слово для переименования компьютера. »
|
Стоп. Так в приведённом Вами коде первое и должно выбираться. Разве нет?
|
Цитата:
Цитата Iska
то есть, мы плавно перешли к пакетным файлам? »
|
Нет нет нет. В моём пакетном файле всё работает так как надо. Просто хотелось реализовать кодами autoit, раз уж решил перенести в Autoit )
Придется наверное прибегнуть к простому варианту
RunWait(@ComSpec & ' /c ........', '', @SW_HIDE)
|
nibble74, покажите, что в $sOut.
|
Так дали же пример, просто возьми первое слово:
Код:
$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)
Ну или так:
|
Creat0R, То что надо было. У меня путаница происходила с StringRegExp )
Всем спасибо за отклик и помощь !
|
Время: 23:33.
© OSzone.net 2001-