そのようなものを入力しています
Desktop>wmic environment where(name="PATH" and systemVariable=FALSE) get variableValue
VariableValue
xxx
しかし、私は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
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行の出力が得られます。ただし、番号が付けられることに注意してください。
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 からダウンロードできます。
遅すぎるかもしれませんが、もう少しエレガントな解決策があると思います。
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
ここに別の解決策があります:
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番目の結果を返すことによって機能します。