Неверный глагол в WMIC получить переменную - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь получить только серийный номер основного жесткого диска для переменной, которая будет echo ed позже.

Я использовал это, и оно работает:

for /f "tokens=2 delims== " %%k in ('WMIC path win32_physicalmedia get serialnumber /value') do (for /f "delims=" %%l in ("%%k") do set "SerialNumber=%%l")

Однако, это только последний серийный номер, и я хочу получить основной.

Если я использовал этокоманда,

"wmic path win32_physicalmedia where tag='\\\\.\\PHYSICALDRIVE0' get serialnumber /value" 

, тогда я получаю только требуемый серийный номер.

Проблема в том, что при попытке изменить рабочий код я получаю сообщение об ошибке при запуске летучей мыши:

Недопустимый глагол.

Попытка получить работу:

for /f "tokens=2 delims== " %%k in ('wmic path win32_physicalmedia where tag='\\\\.\\PHYSICALDRIVE0' get serialnumber /value') do (for /f "delims=" %%l in ("%%k") do set SerialNumber=%%l)

Ошибки:

Недопустимый глагол

Если я запускаю просто:

wmic path win32_physicalmedia where tag='\\\\.\\PHYSICALDRIVE0' get serialnumber /value in CMD

Я получаю следующий вывод:

SerialNumber=     WD-WCC2E1XJADRT

Так что я знаю, что команда работает.

Она даже не работаетнезависимо от того, есть ли пробелы, я просто хочу, что после =.Я делаю это в WINPE с поддержкой WMIC, поэтому Powershell не вариант.

Всего скриптов

@echo OFF
setlocal
for %%v in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do if exist %%v:\drives.txt set w=%%v

for /f "tokens=2 delims== " %%k in ('wmic path win32_physicalmedia where tag='\\\\.\\PHYSICALDRIVE0' get serialnumber /value)') do (for /f "delims=" %%l in ("%%k") do set SerialNumber=%%l)

for /F "tokens=2" %%i in ('date /t') do set "Date=%%i"
echo %SerialNumber%,%Date% >> %w%:\drives.txt

Ответы [ 2 ]

3 голосов
/ 29 мая 2019

Если вы измените свою команду на это:

WMIC Path Win32_PhysicalMedia Where "Tag='\\\\.\\PHYSICALDRIVE0'" Get SerialNumber /Value

= будет защищено.

Попробуй так:

@Echo Off
For /F "Tokens=1*Delims==" %%A in ('
    WMIC Path Win32_PhysicalMedia Where "Tag='\\\\.\\PHYSICALDRIVE0'" Get SerialNumber /Value 2^>Nul
') Do For %%C In (%%B) Do Set "SerialNumber=%%C"
Echo [%SerialNumber%] & Pause

Я добавил последнюю строку, чтобы показать любую возвращаемую переменную и значение.

1 голос
/ 29 мая 2019

Было бы так легко в PowerShell.Вы можете извлечь zip для Powershell 6 (pwsh) на файлообменнике для winpe.https://github.com/PowerShell/PowerShell/releases/download/v6.2.1/PowerShell-6.2.1-win-x64.zip

$SerialNumber = Get-CimInstance win32_physicalmedia | 
  Where tag -Match physicaldrive0 | Select -Expand serialnumber

Вот еще один способ .bat («%» - это символы подстановки sql, их необходимо удвоить в файле .bat):

for /f "skip=1" %%i in ('wmic path win32_physicalmedia where "tag like '%%PHYSICALDRIVE0%%'" get serialnumber') do if not defined serialnumber set serialnumber=%%i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...