web-dev-qa-db-ja.com

プロパティ名のないWMIC出力プロパティ値

そのようなものを入力しています

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

しかし、私はVariableValueを出力に入れたくありません。単にxxxを取得したいのですが、可能ですか?

5

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 /fwmic出力をループします。
  • skip=1はヘッダー行をスキップします(VariableValueを含む)
  • findstr /r /v "^$"は、wmic出力から末尾の空白行を削除します。

出力例:

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

参考文献

11
DavidPostill

パイプ それを通して 検索

wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue | find /i "c:"

または、パイプを使用して findstr にパイプすることもできます。

wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue | findstr/n ^^|findstr "^[2-9]:"

これにより、2〜9行の出力が得られます。ただし、番号が付けられることに注意してください。

2
Ploni

Ploniの提案に従って、出力を findstr にパイプしますが、findstrには_/v_オプションを使用します。このオプションは、一致を含まない行のみを表示するように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>
_

注:_/R_オプションを使用してfindstrに指定し、VariableValueで始まる行のみを無視するように指定することもできます。 正規表現 そして、検索文字列の前に_^_を置きます。これは、 キャレット 文字が行の先頭を表すためです。例:wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue | findstr /V /R "^VariableValue"

Update:findおよびfindstrコマンドの代わりに、GNU grep ユーティリティは、正規表現をサポートし、Linux/Unixシステムで広く使用されており、Windowsで使用できます。Grepおよびその他の [〜#〜] gnu [ 〜#〜] Windowsシステム用のユーティリティは GnuWin Packages からダウンロードできます。

2
moonpoint

遅すぎるかもしれませんが、もう少しエレガントな解決策があると思います。

wmicでは、stylesheetsを使用して出力をフォーマットできます。

この例を考えてみましょう:

wmic os get OSArchitecture /format:csv

出力は

Node,OSArchitecture
MY-COMPUTER,64bit

引数/format:csvを使用すると、デフォルトで%WINDIR%\wbem\en-USにあるcsv.xlsスタイルシートを使用するようにwmicに指示します(en-Usをロケールに置き換えます)。

そして今、小さな魔法:独自の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
1

ここに別の解決策があります:

    for /f "usebackq skip=1 delims== tokens=2" %i in (`wmic environment where ^(name^="PATH" and systemVariable^=FALSE^) get variableValue /FORMAT:TextValueList`) do @echo %i

この方法は、wmicクエリの値に等号が含まれていない場合にのみ正しく機能することに注意してください。

基本的には、等号でリストを分割し、2番目の結果を返すことによって機能します。

0
Jenna Sloan