在存储 "wmic csproduct get vendor format:list c="的输出时遇到了问题。

问题描述 投票:0回答:1

谢谢你检查我的问题,我想。

  • 把一个wmic查询的输出转换成一个变量

这里有一些背景信息,说明为什么我需要完成这个任务.我的工作政策要求配备网络摄像头的笔记本电脑和平板电脑在BIOS中禁用它们。现在我们是远程办公,我们需要在BIOS中启用网络摄像头。我们有一些工具可以用来在系统运行时启用BIOS功能。我想写一个脚本,让psexec进入一台机器,获取厂商信息并将其存储在一个变量中,一旦psexec退出,就可以在脚本中进行访问。我想我可以顺利地写出剩下的脚本,但是我不知道如何将下面命令的结果存储在一个变量中。

wmic csproduct get vendor /format:list | findstr/c=

例如,在我的机器上,这个命令的输出是:

Vendor=Dell Inc.

我想捕捉输出结果并将其存储在一个变量中 以便以后在我要写的脚本中使用 这样我就可以处理特定厂商的BIOS操作。我已经尝试过 set sysvend=wmic csproduct get vendor /format:list | findstr/c= 但当我回应 %sysvend% 如果它的工作,我得到以下而不是我想要的。wmic csproduct get vendor /format:list | findstr/c= 如果有人知道怎么做,我会非常感谢你的帮助。我对确定供应商的其他选择持开放态度。

batch-file dos wmic
1个回答
2
投票

比使用 findfindstr 而没有问题的 0x0D0D0A 行结束。

@Echo Off & SetLocal EnableExtensions
For /F Tokens^=6Delims^=^" %%G In (
    '%__APPDIR__%wbem\WMIC.exe CSProduct Get Vendor /Format:MOF 2^>NUL'
) Do Set "vendor=%%G"

这个解决方案还可以防止不需要的尾部字符 与供应商名称字符串, 这可能是一个常见的情况。


2
投票

有一个已知的 wmic 错误,所以您需要解析 wmic 使用两个嵌套循环进行输出,例如,如下所示。

FOR /F "tokens=1* delims==" %%s IN ('
    wmic csproduct get vendor /value ^| find "="
') DO for /F "tokens=*" %%i in ("%%t") do SET "vendor=%%i"

这里的 for 循环是

  • %%s 检索到的 vendor 值。
  • %%i 去掉结尾 回车 在返回的值(wmic 行为):每个输出行以 0x0D0D0A (CR+CR+LF),而不是普通的。0x0D0A (CR+LF)。

参见Dave Benham的 WMICFOR /F: 修正尾部的问题 <CR> 问题


0
投票

发布的答案是为了证明命令可以作为一个变量来分配和执行,与Neko的答案相反,根据OP的问题。

@Echo Off
Set Get.Vendor=^>"%TEMP%\Vendor.log" (wmic csproduct get vendor /value ^| 
findstr /c:=) ^&^& (For /F "UsebackQ Tokens=2* Delims==^EOL" %%A In ("%TEMP%\Vendor.log") Do For /F "Delims=" %%T In ("%%A") Do Set "Vendor=%%~T") ^&^& Echo.!Vendor!
Setlocal EnableDelayedExpansion
%Get.Vendor%
pause

0
投票

使用 for %%i in (wmic csproduct get vendor /format:list ^| findstr/c=) do (set var=%%~I)这样做的结果是,for循环变量 %%i 成为for循环中命令的输出,允许你设置另一个变量作为for循环变量。你需要在前面的 | 因为如果不这样做,命令就会从for循环中流出,而不会在for循环中执行。你也可以用双引号将命令包围起来 ("),你就不需要转义管了。由于命令。 %var% 将等于你的wmic命令的输出。

最后的命令将是:

@echo off
for /f "tokens=* delims==" %%i in (' wmic csproduct get vendor /format:list ^| findstr /c:"=" ') do (set var=%%~i)
echo %var%
rem echoing var to make sure the variable is what you wanted

Output for me:

Vendor=Microsoft Corporation

如果你希望输出是 Microsoft Corporation 具体来说,你可以加。

set var=%var:~7%

去掉前7个字符。你也可以将代币改为 2* 而不是 *. :

for /f "tokens=2* delims==" %%j in (' wmic csproduct get vendor /format:list ^| findstr /c:"=" ') do (set var=%%~j)

注:产出。

Microsoft Corporation

注释:在批处理文件中,与powershell不同的是,你不能将一个变量设置为命令,并使其成为输出。

在批处理文件中,与powershell不同,你不能将一个变量设置为命令,并让它成为输出,这就是为什么传统的将命令的输出设置为变量的方法是使用 for 循环。另外,只是偏好,我建议使用 /value 转而 /format:list.

经过测试,我的工作

© www.soinside.com 2019 - 2024. All rights reserved.