我正在尝试将主硬盘序列号设置为一个变量,以便稍后进行echo
。
我已经使用了这个,它是有效的:
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"
那么我只能得到想要的序列号。
问题是,当我试图修改工作代码时,我在运行bat时得到一个错误:
无效的谓词。
试着去上班:
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
发布于 2019-05-30 00:45:59
如果您将命令修改为:
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
我添加了最后一行,只是为了显示任何返回的变量和值。
发布于 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
$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
https://stackoverflow.com/questions/56364141
复制相似问题