windows - 将部分结果命令存储到变量

标签 windows batch-file cmd

亲爱的人们和其他人,您好,

今天我想创建一个简单的脚本,认为将结果存储到以下命令的 var 中会很容易:

wmic bios get serialnumber | findstr /N /V SerialNumber

结果:

2:H3GK4S1
3:

问题是当我尝试使用 wmic 获取序列号时,它会按预期返回字符串,但也会返回一个空字符串/行。当我尝试将序列存储到变量时,它会存储它,然后直接用空字符串覆盖它。这是我现在几乎可以使用的功能:

FOR /F "tokens=*" %g IN ('Wmic Bios Get SerialNumber ^| FINDSTR /N /V SerialNumber') DO (SET serial=%g & ECHO %g)

这给出了以下输出:

FOR /F "tokens=*" %g IN ('Wmic Bios Get SerialNumber ^| FINDSTR /N /V SerialNumber') DO (SET serial=%g & ECHO %g)
2:H3GK4S1
3:

从上面可以看出,循环覆盖了串行变量,如果有人能帮助我找到正确的方向来使其工作,我会很生气。

最佳答案

在命令提示符处:

For /F "Tokens=1* Delims==" %g In ('WMIC BIOS Get SerialNumber /Value') Do @For /F "Tokens=*" %i In ("%h") Do @Set "serial=%i" & Echo %i

或者在批处理文件中:

@For /F "Tokens=1* Delims==" %%g In ('WMIC BIOS Get SerialNumber /Value'
) Do @For /F "Tokens=*" %%i In ("%%h") Do @Set "serial=%%i" & Echo %%i
@Pause

编辑
如果您愿意在批处理文件中使用带标签的部分:

@Echo Off
Set "serial="
For /F "Skip=1 Delims=" %%A In ('WMIC BIOS Get SerialNumber') Do If Not Defined serial Call :Sub %%A
Set serial 2>Nul
Pause
GoTo :EOF

:Sub
Set "serial=%*"
GoTo :EOF

关于windows - 将部分结果命令存储到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49671319/

相关文章:

python - 如何在命令终端中使用 python 处理远程文件

windows - EXE版本号——如何正确比较次要版本

窗口/命令 |如果例如,如何断线字符数达到?

windows - 如何使用充满服务器名称的记事本文件来批处理执行命令?

windows - 如何检查批处理文件中的文件是否存在

batch-file - 如何使用qpdf解密多个pdf文件?

java - 在运行时通过 java 中的命令提示符加载配置文件 (project.properties)

windows - 'touch' 不是内部或外部命令,也不是可运行的程序 或批处理文件

windows - 为什么 Windows 绘制自己的最小-最大-关闭按钮,即使 WM_NCPAINT 已正确(?)重新实现?

java - 无法访问在特定机器上运行的Web应用程序