使用Windows批处理读取JAR文件中的XML文件
我有一个XML文件TData.XML,它存储在两个不同的位置。我想通过读取该文件每个副本中的构建标记来查看它们的版本是否相同。我能够读取存储在第一个位置的副本,但无法读取存储在第二个位置的副本,因为它与另一个称为data.xml的xml文件一起存储在一个可执行JAR文件中 我使用的批处理代码使用Windows批处理读取JAR文件中的XML文件,xml,windows,batch-file,cmd,Xml,Windows,Batch File,Cmd,我有一个XML文件TData.XML,它存储在两个不同的位置。我想通过读取该文件每个副本中的构建标记来查看它们的版本是否相同。我能够读取存储在第一个位置的副本,但无法读取存储在第二个位置的副本,因为它与另一个称为data.xml的xml文件一起存储在一个可执行JAR文件中 我使用的批处理代码 @echo off fc D:\lucy\MasterData\TData.xml W:\MasterDataGDDFolders\Trellis_3.3_Higher\MasterData.jar\T
@echo off
fc D:\lucy\MasterData\TData.xml W:\MasterDataGDDFolders\Trellis_3.3_Higher\MasterData.jar\TData.xml /A > nul
if errorlevel 1 (
echo.
echo in SVN
findstr "<Build>" D:\lucy\MasterData\TData.xml
echo.
echo in DropBox
findstr "<Build>" W:\MasterDataGDDFolders\Trellis_3.3_Higher\MasterData.jar\TData.xml
echo.
echo.
echo TData files are different.
) else (
echo.
echo in SVN
findstr "<Build>" D:\lucy\MasterData\TData.xml
echo.
echo in DropBox
findstr "<Build>" W:\MasterDataGDDFolders\Trellis_3.3_Higher\MasterData.jar\TData.xml
echo.
echo.
echo TData files matches.
)
@echo关闭
fc D:\lucy\MasterData\TData.xml W:\MasterDataGDDFolders\grillis\u 3.3\u Higher\MasterData.jar\TData.xml/A>nul
如果错误级别为1(
回声。
SVN中的回声
findstr“”D:\lucy\MasterData\TData.xml
回声。
投递箱中的回声
findstr“”W:\MasterDataGDDFolders\grillis_3.3_Higher\MasterData.jar\TData.xml
回声。
回声。
echo TData文件是不同的。
)否则(
回声。
SVN中的回声
findstr“”D:\lucy\MasterData\TData.xml
回声。
投递箱中的回声
findstr“”W:\MasterDataGDDFolders\grillis_3.3_Higher\MasterData.jar\TData.xml
回声。
回声。
回显TData文件匹配。
)
MasterData.jar的内容是TData.xml和Data.xml
TData.XML的XML代码
<?xml version="1.0" encoding="UTF-8"?>
<CDMDataVersion>
<Major>3</Major>
<Minor>0</Minor>
<Build>19</Build>
<Delimiter>.</Delimiter>
</CDMDataVersion>
3.
0
19
.
在jar文件中的2个xml文件中,我只想读取TData.xml。你能告诉我上面的代码哪里出错了吗 您不能通过
findstr
命令直接访问jar
内容,首先必须解压缩jar
,然后访问内容,如果您安装了7-zip,则可以执行以下操作:
%ProgramFiles%\7-Zip\7z.exe“x-y W:\MasterDataGDDFolders\grillis\u 3.3\u Higher\MasterData.jar-oW:\MasterDataGDDFolders\grillis\u 3.3\u Higher\MasterData
x
用于提取-y
表示对所有提示都说是,而-o
表示指定输出目录注意,-o
和输出之间没有空格:-oW:\Master…
您可以通过提取内容的文件夹访问jar
文件。与您的findstr
结合使用:
"%ProgramFiles%\7-Zip\7z.exe" x -y W:\MasterDataGDDFolders\Trellis_3.3_Higher\MasterData.jar -oW:\MasterDataGDDFolders\Trellis_3.3_Higher\MasterData
findstr "<Build>" W:\MasterDataGDDFolders\Trellis_3.3_Higher\MasterData\TData.xml
%ProgramFiles%\7-Zip\7z.exe“x-y W:\MasterDataGDDFolders\grillis\u 3.3\u Higher\MasterData.jar-oW:\MasterDataGDDFolders\grillis\u 3.3\u Higher\MasterData
findstr“”W:\MasterDataGDDFolders\grillis_3.3_Higher\MasterData\TData.xml
希望这能有所帮助,我的机器上安装了WinRAR,并且.exe文件的路径是“C:\Program Files(x86)\WinRAR”,那么我应该在代码中做什么更改?我从未从命令行使用WinRAR,但是在这个链接中有一些示例:。尝试使用
%程序文件(x86)%\WinRAR\unrar x c:\yourfile.jar c:\yourfile
而不是7z.exe…另一种可能是,您安装7z的原因是:是,代码正在使用7Zip。唯一的问题是,两个文件都被提取,而我希望对TData.xml文件进行提取。那么,我应该对您的代码做哪些更改,以便只提取一个特定的文件nd当我再次运行脚本时,提取文件的旧副本将被删除并替换为同一文件的较新版本??要仅提取一个文件,可以使用以下语法:7z.exe x-y[archive]-o[outputdir][fileFilter]-r
在您的情况下7z.exe x-y W:\…MasterData.jar-oW:\…TData.xml-r
,在执行此操作删除文件之前,可以使用windowsdel
命令:del filePath
。