WMIC 输出属性值而不输出属性名称

WMIC 输出属性值而不输出属性名称

我正在输入类似的东西

Desktop>wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue
VariableValue
xxx

但我不想VariableValue进入输出。我只想得到xxx 可以吗?

答案1

我不希望 VariableValue 进入输出。我只想获取 xxx 可以吗?

使用批处理文件:

@echo off
setlocal
for /f "usebackq skip=1 tokens=*" %%i in (`wmic environment where ^(name^="PATH" and systemVariable^=FALSE^) get variableValue ^| findstr /r /v "^$"`) do echo %%i
endlocal

使用命令行:

for /f "usebackq skip=1 tokens=*" %i in (`wmic environment where ^(name^="PATH" and systemVariable^=FALSE^) get variableValue ^| findstr /r /v "^$"`) do @echo %i

笔记:

  • for /f循环输出wmic
  • skip=1跳过标题行(包含VariableValue
  • findstr /r /v "^$"从输出中删除尾随的空白行wmic

示例输出:

C:\Users\DavidPostill\AppData\Roaming\npm

进一步阅读

答案2

要省略标题行,只需将输出通过管道传输到more并告诉它省略第一行:

wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue | more +1

https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/more

答案3

也许已经太晚了,但我认为还有一个更优雅的解决方案。

wmic 允许您使用样式表格式化输出。

考虑这个例子:

wmic os get OSArchitecture /format:csv

输出为

Node,OSArchitecture
MY-COMPUTER,64bit

通过该参数,/format:csv您可以告诉 wmic 使用默认位于%WINDIR%\wbem\en-US(替换en-Us为您的语言环境) 的 csv.xls 样式表。

现在来看看小魔术:您可以创建自己的 xsl,告诉 wmic 使用它并根据需要格式化输出

例如,创建一个样式表single-value-only.xsl

<?xml version="1.0"?>
<!-- Maybe you should refine this stylesheet a bit for a broader or production use but this basically works-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output encoding="utf-16" omit-xml-declaration="yes"/>
<xsl:param name="norefcomma"/>
<xsl:template match="/">
<xsl:value-of select="COMMAND/RESULTS[1]/CIM/INSTANCE[1]/PROPERTY/VALUE"/>
</xsl:template> 
</xsl:stylesheet>

然后运行 ​​wmic

wmic os get OSArchitecture /format:"C:\path\of\single-value-only.xsl"

结果是

64bit

如果你在批处理脚本中,想要将值放入变量 MY_VAR

for /f %%i "delims=" in (`wmic os get OSArchitecture /format:"C:\path\of\single-value-only.xsl"`) do set MY_VAR=%%i

答案4

将输出传输到查找字符串按照 Ploni 的建议,但使用/vfindstr 的选项。该选项告诉 findstr 仅显示不包含匹配项的行,因此您可以指定不想看到包含“VariableValue”的行。例如:

C:\Users\Jane>wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue
VariableValue
%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;


C:\Users\Jane>wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue | findstr /v VariableValue
%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;


C:\Users\Jane>

注意:如果您需要使用 findstr 选项包含行中后面出现的行,您还可以指定只忽略以 VariableValue 开头的行,/R该选项指定您将使用正则表达式然后^在搜索字符串前放置一个,因为插入符号字符代表一行的开始。例如,wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue | findstr /V /R "^VariableValue"

更新:作为findfindstr命令的替代,GNUgrep实用程序支持正则表达式,在 Linux/Unix 系统上广泛使用,现已适用于 Windows。Grep 以及其他GNU适用于 Windows 系统的实用程序可以从GnuWin 软件包

相关内容