好的,所以我不太熟悉For / F。 我可以修改它,如果文件是静态的,并有一套行我可以跳过,然后从中提取数据。 我目前正在尝试修改.XML文件。 该文件将有不同的行数,但总是有以下几点
</SyncWindow> </AutoSyncWindows> <SyncServiceConnections /> <DaysToRetainRecordedData>90</DaysToRetainRecordedData> <SyncRestartRequired>false</SyncRestartRequired> - <LastGroupsSynced>
<DaysToRetainRecordedData>90</DaysToRetainRecordedData>
可能不同,例如<DaysToRetainRecordedData>30</DaysToRetainRecordedData>
使用令牌,search该行的.XML文件的最有效方法是用下面的<DaysToRetainRecordedData>0</DaysToRetainRecordedData>
覆盖它。
我不能覆盖整个.XML文件,因为他们有不同的服务器密钥,每个机器都有所不同。所以我需要能够find该行,并将值编辑为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程序中。