alex_diablo
Постоянный участник
- Сообщения
- 144
- Реакции
- 9
HJ3DZ72
HJ37H92
4M6TV22
5SQ3F5J
B9L9CC2
MSK-AIVANOV
MSK-BPETROV
MSK-VSIDOROV
MSK-TANISIN
MSK-KFROLOVA
wmic bios get serialnumber
for /f "skip=1" %%i in ('"wmic bios get serialnumber"') do echo a=%%i
SetLocal EnableExtensions
For /F %%s in ('wmic bios get serialnumber') do set var=%%s
echo %var%
P:\>SetLocal EnableExtensions
P:\>For /F %s in ('wmic bios get serialnumber') do set var=%s
P:\>set var=SerialNumber
P:\>set var=1WQ3F5J
:\>set var=
P:\>echo
Режим вывода команд на экран (ECHO) включен.
P:\>pause
Для продолжения нажмите любую клавишу . . .
P:\>SetLocal EnableExtensions
P:\>For /F %s in ('wmic bios get serialnumber') do set var=%s
P:\>set var=SerialNumber
P:\>set var=1WQ3F5J
:\>set var=
P:\>echo
Режим вывода команд на экран (ECHO) включен.
P:\>pause
Для продолжения нажмите любую клавишу . . .
FOR /F "tokens=2 delims='='" %%A in ('wmic Bios Get SerialNumber /value') do SET serialnumber=%%A
echo %serialnumber%
SerialNumber
To Be Filled By O.E.M.
Да, почти так. Там у wmic ещё лишний знак переноса строки, так что нужно с find:с первой частью задачи вроде разобрался.
For /F "tokens=1* delims==" %%a in ('wmic bios get serialnumber /value ^|find "="') do set serialnumber=%%b
alex_diablo, уверены, что это надёжный способ?
На моей МП (да и на многих других) wmic bios get serialnumber выдаёт:
Код:SerialNumber To Be Filled By O.E.M.
Да, почти так. Там у wmic ещё лишний знак переноса строки, так что нужно с find:
CMD/BATCH:For /F "tokens=1* delims==" %%a in ('wmic bios get serialnumber /value ^|find "="') do set serialnumber=%%b
HJ3DZ72.MSK-AFROLOV.50:E5:49:4A:61:54
Например, брать МАК адаптера, отмеченного как "Основной", убрав виртуальные (типа VMWare / VBox), можно с фильтрацией по подсети IP (предпоследний октет)но тут еще нюанс... как быть, если в системе несколько сетевых адаптеров?
ну и по второму вопросу... не поможете?
@echo off
SetLocal EnableExtensions
set SNFile=1.txt
set IDFile=2.txt
For /F "tokens=1* delims==" %%a in ('wmic bios get serialnumber /value ^|find "="') do set serialnumber=%%b
set n=0& set "Found="
For /F "UseBackQ delims=" %%a in ("%SNFile%") do set /a n+=1& if "%serialnumber%"=="%%a" (set Found=true& goto ext)
:ext
if not Defined Found (echo NOT Found!& pause & exit /b)
For /F "tokens=1* delims=]" %%a in ('type "%IDFile%" ^| find /n /v "" ^| findstr /RC:"^\[%n%\]"') do set ID=%%b
echo Line=%n%
echo SN="%serialnumber%"
echo ID="%ID%"
pause
Например, брать МАК адаптера, отмеченного как "Основной", убрав виртуальные (типа VMWare / VBox), можно с фильтрацией по подсети IP (предпоследний октет)
Или взять серийный номер тома (команда vol) или жесткого диска (см. пост), с которого запущена ОС.
Можно ещё взять, но только как часть ID, инфу из SMBIOS и CPUID, но там мало чего уникального и два одинаковых процессора/BIOS будут выдавать идентичные данные (+ это не на Batch).
CMD/BATCH:@echo off SetLocal EnableExtensions set SNFile=1.txt set IDFile=2.txt For /F "tokens=1* delims==" %%a in ('wmic bios get serialnumber /value ^|find "="') do set serialnumber=%%b set n=0& set "Found=" For /F "UseBackQ delims=" %%a in ("%SNFile%") do set /a n+=1& if "%serialnumber%"=="%%a" (set Found=true& goto ext) :ext if not Defined Found (echo NOT Found!& pause & exit /b) For /F "tokens=1* delims=]" %%a in ('type "%IDFile%" ^| find /n /v "" ^| findstr /RC:"^\[%n%\]"') do set ID=%%b echo Line=%n% echo SN="%serialnumber%" echo ID="%ID%" pause
Формат таблиц именно XLS / не CSV ?
Для XLS нужно писать на другом языке, из интерпретируемых, встроенных в ОС, например, VBScript / JScript или PowerShell.
ну вроде можно табличку и в CSV выгрузить
@echo off
SetLocal EnableExtensions
(
for /f %%a in ('getmac^|find /i "device"') do echo %%a
)>mac.txt
Заменить на нужное в самой переменной.только вот в системе используется разделитель тире, а у меня в таблице октеты маков все разделены двоеточиями...
set s=%s:-=:%
Брать данные из ipconfig /all
Фильтровать | find и т.д. или findstr, потом бить на токены через For и tokens, delims
Заменить на нужное в самой переменной.
Замена - на :
CMD/BATCH:set s=%s:-=:%
HJ3DZ72;MSK-BPETROV;90-2b-34-33-e9-4b;dell_7010
HJ37H92;MSK-AIVANOV;64-00-6a-32-9b-eb;dell_7020
4M6TV22;MSK-VSIDOROV;64-00-6a-67-ed-18;dell_5040
5SQ3F5J;MSK-TANISIN;34-e6-d7-56-09-24;dell_7010
B9L9CC2;MSK-KFROLOVA;64-00-6a-67-f0-2b;dell_E7240
Чем же помочь? Где ваш код?
@echo off
SetLocal EnableExtensions
REM в файле 4 столбца, разделенные косой чертой: серийный номер/имя-компа/мак-адрес/модель
REM данный файл сформирован заранее.
set IDFile=1.txt
REM выдергиваем серийник из биоса
For /F "tokens=1* delims==" %%a in ('wmic bios get serialnumber /value ^|find "="') do set serialnumber=%%b
echo %serialnumber%
FOR /F "UseBackQ tokens=2 delims=/" %%a in ('"%~dp01.txt" ^|find / "%serialnumber%"') do set name=%%a
echo %name%
Зачем лепите своё. Я уже выше давал код, как искать. Он работает.не получается(
@echo off
SetLocal EnableExtensions
:: получить производителя ПК и модель
For /f "tokens=1* delims==" %%a in ('wmic csproduct get vendor^, version /value') do (
if /i "%%a"=="vendor" set "vendor=%%b"
if /i "%%a"=="version" set "version=%%b"
)
set "Model=%vendor%_%version%"
:: получить имя ПК
For /f "tokens=1* delims==" %%a in ('wmic computersystem get name /value ^|find /i "name"') do set "PCName=%%b"
set model
set PCName
pause
Зачем лепите своё. Я уже выше давал код, как искать. Он работает.
Вам всего лишь нужно собрать полную строку, т.е. вместо if "%serialnumber%"== подставить переменную, в которой будет заранее записана полностью ваша строка:
Серийный номер вы уже знаете, как получать.
Имя ПК, производитель, модель:
CMD/BATCH:@echo off SetLocal EnableExtensions :: получить производителя ПК и модель For /f "tokens=1* delims==" %%a in ('wmic csproduct get vendor^, version /value') do ( if /i "%%a"=="vendor" set "vendor=%%b" if /i "%%a"=="version" set "version=%%b" ) set "Model=%vendor%_%version%" :: получить имя ПК For /f "tokens=1* delims==" %%a in ('wmic computersystem get name /value ^|find /i "name"') do set "PCName=%%b" set model set PCName pause
MAC я не знаю, как вам получить, потому что не знаю, какие у вас критерии для фильтрации нужного.
Я предлагал выше по подсети, первым 3-м октетам. Но я не в курсе допустимо ли это для вашей сети, будет ли она менятся, и какие конкретно там у вас цифры.
Соедините всё вместе и подставьте в код поиска.
FOR /F "tokens=1-4 delims=/" %%a in ('type "%~dp01.txt" ^|find /i "%serialnumber%"') do (
set name=%%b
set mac=%%c
set model=%%d
)
@for /f %%a in ('getmac^|find /i "device"') do set mac=%%a
@echo off
SetLocal EnableExtensions
For /F "tokens=1* delims==" %%a in ('wmic bios get serialnumber /value ^|find "="') do set servicetag=%%b
@for /f %%a in ('getmac^|find /i "device"') do set mac-id=%%a
FOR /F "tokens=1-4 delims=/" %%a in ('type "%~dp0computers.txt" ^|find /i "%servicetag%"') do (
set serial=%%a
set pcname=%%b
set mac=%%c
set model=%%d
)
if "%serial%"=="%servicetag%" (goto rename_pc) else (goto stag_not_found)
:stag_not_found
FOR /F "tokens=1-4 delims=/" %%a in ('type "%~dp0computers.txt" ^|find /i "%mac-id%"') do (
set pcname=%%b
set mac=%%c
set model=%%d
)
if "%mac%"=="%mac-id%" (goto rename_pc) else (goto exit)
:rename_pc
ping mail.ru -n 10
wmic computersystem where name="%computername%" rename "%pcname%"
ping google.com -n 10
:exit
exit
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?