我经常更新的XML文件,我想编写一个脚本(PowerShell或批处理文件)来显示它的版本。
<rules version="240">
是文件的第一行。
我想解析240
并将其输出到屏幕上。
答案 0 :(得分:3)
有利于@FoxDeploy成为建议将XML解析为XML的唯一其他回答者,而不是将其标记化并将其作为平面文本进行拼写。这是他的方法的变体。
如果XML结构不严格遵循XML标准,则Microsoft.XMLDOM
COM对象更容忍宽松格式化。这是另一种PowerShell替代方案。
$xml = new-object -COM Microsoft.XMLDOM
[void]$xml.load('desktop\test.xml')
$xml.async = 0
$xml.setProperty('SelectionLanguage', 'XPath')
$xml.documentElement.selectSingleNode('//rules').getAttribute('version')
或者,如果您想在批处理脚本中使用它,则通过JScript嵌入程序在Windows Scripting Host中使用相同的COM对象,如果从cmd控制台触发或双击,则执行速度会更快。 (以.bat扩展名保存。)
@if (@CodeSection == @Batch) @then
@echo off
setlocal
for /f %%I in ('cscript /nologo /e:Jscript "%~f0" "%CD%\test.xml"') do set "%%I"
set version
set /P "=Press any key to exit..."<NUL & pause >NUL & echo;
goto :EOF
@end // end batch / begin JScript
var DOM = WSH.CreateObject('Microsoft.XMLDOM');
with (DOM) {
load(WSH.Arguments(0));
async = false;
setProperty('SelectionLanguage', 'XPath');
}
var rules = DOM.documentElement.selectSingleNode('//rules');
WSH.Echo('version=' + rules.getAttribute('version'));
答案 1 :(得分:1)
我假设您有一个类似于此的文件,名为books.xml。
<?xml version="1.0"?>
<?rules version="240"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
使用Get-Content命令并指定为[xml],PowerShell可以非常轻松地本地解析XML文件。
[xml](Get-Content .\book.xml)
xml rules catalog
--- ----- -------
version="1.0" version="240" catalog
从这一点开始,您可以使用Select cmdlet轻松选择版本。
[xml](Get-Content .\book.xml) | select -expand Rules
version="240"
在这个例子中,我有一些book.xml文件,每个文件都有不同的版本。
Dir book* | ForEach {(Get-Content $_.FullName) -as [xml]}
xml rules catalog
--- ----- -------
version="1.0" version="240" catalog
version="1.0" version="250" catalog
version="1.0" version="350" catalog
答案 2 :(得分:0)
尝试sed!
more <insert your xml file here> | grep 'rules version' | sed 's/.\+\<rules version=\"//g' | sed 's/".\+$//g'ere
答案 3 :(得分:0)
应该这样做。
for /f tokens^=2^ delims^=^" %%A in ('findstr /n . input.txt ^| findstr /b ^^1:')do @echo %%A
输出:
240