Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Нужна помощь по StringRegExp

Ответить
Настройки темы
[решено] Нужна помощь по StringRegExp

Старожил


Сообщения: 247
Благодарности: 32

Профиль | Отправить PM | Цитировать


Изменения
Автор: nibble74
Дата: 23-05-2020
Нужна помощь по этому коду.

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

Отправлено: 14:10, 23-05-2020

 

Ветеран


Contributor


Сообщения: 26108
Благодарности: 7599

Профиль | Отправить PM | Цитировать


Цитата 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)
Далее напишите словами, что Вы хотите получить.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:01, 23-05-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 247
Благодарности: 32

Профиль | Отправить PM | Цитировать


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

Отправлено: 16:38, 23-05-2020 | #3


Ветеран


Contributor


Сообщения: 26108
Благодарности: 7599

Профиль | Отправить PM | Цитировать


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" выбрать первое слово для переименования компьютера. »
Стоп. Так в приведённом Вами коде первое и должно выбираться. Разве нет?

Отправлено: 20:11, 23-05-2020 | #4


Старожил


Сообщения: 247
Благодарности: 32

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 23:56, 23-05-2020 | #5


Аватара для Паразит

Пользователь


Сообщения: 62
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 12:17, 24-05-2020 | #6


Аватара для Creat0R

Must AutoIt


Moderator


Сообщения: 3041
Благодарности: 1004

Профиль | Сайт | Отправить PM | Цитировать


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

Код: Выделить весь код
$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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

Русское сообщество AutoIt | CreatoR's Lab | Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:26, 24-05-2020 | #7


Старожил


Сообщения: 247
Благодарности: 32

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 13:16, 24-05-2020 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Нужна помощь по StringRegExp

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Нужна помощь по Excel Veronika35 Microsoft Office (Word, Excel, Outlook и т.д.) 4 24-06-2017 19:26
Разное - нужна помощь по сборке 8.1 mitin Microsoft Windows 8 и 8.1 3 15-04-2015 22:36
[решено] В помощь по функциям StringRegExp и StringRegExpReplace beve AutoIt 3 19-02-2009 20:56
Разное - Нужна помощь по SP-Forth zi0n Программирование и базы данных 1 18-08-2008 08:00
нужна помощь по RIS ! mikola1983 Автоматическая установка Windows 2000/XP/2003 3 03-04-2008 15:33




 
Переход