我正在输入类似的东西
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
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 查找字符串- 在文件中搜索字符串。
- 对于/f- 循环命令以执行另一个命令的结果。
- 西米克- Windows 管理规范命令。
答案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 的建议,但使用/v
findstr 的选项。该选项告诉 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"
更新:作为find
和findstr
命令的替代,GNUgrep实用程序支持正则表达式,在 Linux/Unix 系统上广泛使用,现已适用于 Windows。Grep 以及其他GNU适用于 Windows 系统的实用程序可以从GnuWin 软件包。