WMIC 上的无效动词获取变量

Ind*_*xia 0 scripting batch-file delimiter wmic

我试图将主硬盘序列号作为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")
Run Code Online (Sandbox Code Playgroud)

但是,它只执行最后一个序列号,我想获取主要序列号。

如果我使用这个命令,

"wmic path win32_physicalmedia where tag='\\\\.\\PHYSICALDRIVE0' get serialnumber /value" 
Run Code Online (Sandbox Code Playgroud)

然后我只得到所需的序列号。

问题是当我尝试修改工作代码时,运行 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)
Run Code Online (Sandbox Code Playgroud)

错误:

无效动词

如果我只运行:

wmic path win32_physicalmedia where tag='\\\\.\\PHYSICALDRIVE0' get serialnumber /value in CMD
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

SerialNumber=     WD-WCC2E1XJADRT
Run Code Online (Sandbox Code Playgroud)

所以我知道命令有效。

空格是否在里面都没有关系,我只想要=. 我在支持 WMIC 的 WINPE 中执行此操作,因此无法选择 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
Run Code Online (Sandbox Code Playgroud)

Com*_*mpo 6

如果您将命令修改为:

WMIC Path Win32_PhysicalMedia Where "Tag='\\\\.\\PHYSICALDRIVE0'" Get SerialNumber /Value
Run Code Online (Sandbox Code Playgroud)

=将得到保护。

像这样尝试:

@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
Run Code Online (Sandbox Code Playgroud)

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