只是爲了好玩/學習。
在windows中,%windir%\system32\wbem
文件夾包含用於輸出wmic格式的xsl文件。並且wmic可以讓你指定一個xsl文件(參數/format
)。所以,我從wbem文件夾中複製textvaluelist.xsl
文件,並將其更改爲您需要的內容。
在最後,我生成此文件myFormat.xsl
:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output encoding="utf-16" omit-xml-declaration ="yes"/>
<xsl:template match="/" xml:space="preserve"><xsl:apply-templates select="//INSTANCE"/></xsl:template>
<xsl:template match="INSTANCE" xml:space="preserve"><xsl:apply-templates select="PROPERTY|PROPERTY.ARRAY|PROPERTY.REFERENCE"/></xsl:template>
<xsl:template match="PROPERTY" xml:space="preserve"><xsl:value-of select="@NAME"/>=<xsl:apply-templates select="VALUE"><xsl:with-param name="type"><xsl:value-of select="@TYPE"/></xsl:with-param><xsl:with-param name="name"><xsl:value-of select="@NAME"/></xsl:with-param></xsl:apply-templates>
</xsl:template>
<xsl:template match="PROPERTY.ARRAY" xml:space="preserve"><xsl:value-of select="@NAME"/>=<xsl:apply-templates select="VALUE.ARRAY"><xsl:with-param name="includequotes">true</xsl:with-param><xsl:with-param name="type"><xsl:value-of select="@TYPE"/></xsl:with-param></xsl:apply-templates></xsl:template>
<xsl:template match="PROPERTY.REFERENCE" xml:space="preserve"><xsl:value-of select="@NAME"/>=<xsl:apply-templates select="VALUE.REFERENCE"></xsl:apply-templates></xsl:template>
<xsl:template match="VALUE.REFERENCE">"<xsl:apply-templates select="INSTANCEPATH/NAMESPACEPATH"/><xsl:apply-templates select="INSTANCEPATH/INSTANCENAME|INSTANCENAME"/>"</xsl:template>
<xsl:template match="NAMESPACEPATH">\\<xsl:value-of select="HOST/text()"/><xsl:for-each select="LOCALNAMESPACEPATH/NAMESPACE">\<xsl:value-of select="@NAME"/></xsl:for-each>:</xsl:template>
<xsl:template match="INSTANCENAME"><xsl:value-of select="@CLASSNAME"/><xsl:for-each select="KEYBINDING"><xsl:if test="position()=1">.</xsl:if><xsl:value-of select="@NAME"/>="<xsl:value-of select="KEYVALUE/text()"/>"<xsl:if test="position()!=last()">,</xsl:if></xsl:for-each></xsl:template>
<xsl:template match="VALUE.ARRAY"><xsl:param name="type"/>{<xsl:for-each select="VALUE">
<xsl:apply-templates select=".">
<xsl:with-param name="type">
<xsl:value-of select="$type"/>
</xsl:with-param>
<xsl:with-param name="includequotes">true</xsl:with-param>
</xsl:apply-templates>
<xsl:if test="position()!=last()">,</xsl:if>
</xsl:for-each>}</xsl:template>
<xsl:template match="VALUE">
<xsl:param name="type"/>
<xsl:param name="name"/>
<xsl:param name="includequotes"/>
<xsl:choose>
<xsl:when test="$type='string'">
<xsl:if test="$includequotes='true'">"</xsl:if><xsl:value-of select="."/><xsl:if test="$includequotes='true'">"</xsl:if>
</xsl:when>
<xsl:when test="$type='char16'">
'<xsl:value-of select="."/>'
</xsl:when>
<xsl:when test="$type='uint64' and $name='FreeSpace'">
<xsl:value-of select="format-number(. div 1073741824,'#0.00')"/>GB
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
只需稍加修改原來的從微軟。在它的最後,有一個修改來處理FreeSpace屬性的情況,並將其轉換爲GB。現在
,使用它,
wmic volume where "driveLetter='c:'" get capacity,freespace /format:"c:\pathTo\myFormat.xsl"
它產生
Capacity=241173401600
FreeSpace=153.61GB
正如你所看到的,因爲規則是隻包括爲FreeSpace
財產,只有它被轉換,而Capacity
是不。
我知道,對於一個簡單的任務變得更加複雜,但正如所說,只是爲了好玩(我第一次編輯XSL)
+1,***非常好!我一直想用自定義的WMIC格式來欺騙,但從來沒有勇氣。現在我已經看到了你的成功,有一天我可能會刺傷它:-) – dbenham