好的,所以我对使用For / F并不是很熟悉.我可以修改它,如果文件是静态的,并且有一组我可以跳过然后从中提取数据的行.我目前正在尝试修改.
XML文件.该文件将具有不同的线路,但始终具有以下内容
< / SyncWindow>
< / AutoSyncWindows>
< SyncServiceConnections />
< DaysToRetainRecordedData> 90℃/ DaysToRetainRecordedData>
< SyncRestartrequired>假LT; / SyncRestartrequired>
– < LastGroupsSynced>
< DaysToRetainRecordedData> 90< / DaysToRetainRecordedData>的值可以不同,例如< DaysToRetainRecordedData> 30< / DaysToRetainRecordedData>
使用令牌,搜索该行的.XML文件并使用以下< DaysToRetainRecordedData> 0< / DaysToRetainRecordedData>覆盖它的最有效方法是什么?
我无法覆盖整个.XML文件,因为它们具有因机器而异的唯一服务器密钥.所以我需要能够找到该行并将值编辑为0.
有什么想法吗?如果For / F不是最有效的方法,我可以根据需要转移到VBS.但它必须从纯shellcode调用,并会使事情变得更复杂.
解决方法
最优雅,灵活和安全的方法是下载
msxsl.exe,然后使用一个小的XSLT样式表来仅修改XML中所需的值:
<!-- DaysToRetainRecordedData.xsl --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="newValue" select="0" /> <!-- this template copies your input XML unchanged --> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*" /> </xsl:copy> </xsl:template> <!-- this template changes one single value --> <xsl:template match="DaysToRetainRecordedData/text()"> <xsl:value-of select="$newValue" /> </xsl:template> </xsl:stylesheet>
在命令行上调用:
msxsl.exe input.xml DaysToRetainRecordedData.xsl –o output.xml newValue=0
命令行参数newValue将显示在XSL程序中.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。