首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WMIC get变量上的谓词无效

WMIC get变量上的谓词无效
EN

Stack Overflow用户
提问于 2019-05-29 23:36:10
回答 2查看 491关注 0票数 0

我正在尝试将主硬盘序列号设置为一个变量,以便稍后进行echo

我已经使用了这个,它是有效的:

代码语言:javascript
复制
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")

但是,它只处理最后一个序列号,而我想要获取主序列号。

如果我使用这个命令,

代码语言:javascript
复制
"wmic path win32_physicalmedia where tag='\\\\.\\PHYSICALDRIVE0' get serialnumber /value" 

那么我只能得到想要的序列号。

问题是,当我试图修改工作代码时,我在运行bat时得到一个错误:

无效的谓词。

试着去上班:

代码语言:javascript
复制
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)

错误:

无效谓词

如果我只运行:

代码语言:javascript
复制
wmic path win32_physicalmedia where tag='\\\\.\\PHYSICALDRIVE0' get serialnumber /value in CMD

我得到以下输出:

代码语言:javascript
复制
SerialNumber=     WD-WCC2E1XJADRT

所以我知道这个命令是有效的。

即使空格在里面也无关紧要,我只想要=.之后的内容我在WINPE中使用WMIC支持来做这件事,所以Powershell不是一个选择。

脚本总数

代码语言:javascript
复制
@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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-30 00:45:59

如果您将命令修改为:

代码语言:javascript
复制
WMIC Path Win32_PhysicalMedia Where "Tag='\\\\.\\PHYSICALDRIVE0'" Get SerialNumber /Value

=将受到保护。

像这样试一下:

代码语言:javascript
复制
@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

我添加了最后一行,只是为了显示任何返回的变量和值。

票数 6
EN

Stack Overflow用户

发布于 2019-05-30 00:35:00

在powershell中,这将非常容易。您可以在winpe的文件共享上解压Powershell6 (pwsh)的zip。https://github.com/PowerShell/PowerShell/releases/download/v6.2.1/PowerShell-6.2.1-win-x64.zip

代码语言:javascript
复制
$SerialNumber = Get-CimInstance win32_physicalmedia | 
  Where tag -Match physicaldrive0 | Select -Expand serialnumber

这是另一种.bat方法('%‘是SQL通配符,您必须在.bat文件中将它们加倍):

代码语言:javascript
复制
for /f "skip=1" %%i in ('wmic path win32_physicalmedia where "tag like '%%PHYSICALDRIVE0%%'" get serialnumber') do if not defined serialnumber set serialnumber=%%i
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56364141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档