用powershell提取zip文件,读取文件,然后提取标签之间的值



我对脚本编写很陌生,我一直被这个问题卡住了。

我想提取一个zip文件,在这个zip文件中有一个名为file.xml的xml文件,我需要从中提取信息

文件很大,我只需要在两个标签之间提取信息。

<Report name="result_many fail" summary="20" yes=19 no="1" finished=20> 

我需要提取标签名称和完成之间的信息,并将其保存到一个txt文件。这个txt文件应该是这样的:

name result_many fail, summary 20, yes 19 , no  1, finished 20

问题是,它解压缩到正确的目标文件夹,但它不保存任何东西到result.txt文件。我的txt文件总是空的。

这是我的代码:

echo "unzipping file..."
powershell "Expand-Archive C:path_to_zip_file -Destinationpath C:path_to_to_destination_folder;
$Path = “C:path_to_to_destination_folderfile.xml;”
Select-Xml -XPath '//Report[@finished]').Node.InnerText;
Set-Content -Path 'C:path_to_to_destination_folderresult.txt'
@echo "done"
有人能帮我一下吗?

撇开你的问题的偶然方面(似乎从cmd.exe调用一个破碎的尝试传递多行命令字符串,无效的示例XML,缺乏文件参数到Select-Xml,缺乏输入到Set-Contentcmdlet):

$path = 'C:path_to_to_destination_folderfile.xml'
(Select-Xml '//Report[@finished]' $path).
Node.Attributes.ForEach({ $_.Name + ' ' + $_.Value }) -join ', ' |
Set-Content C:path_to_to_destination_folderresult.txt

要从cmd.exe(批处理文件)调用PowerShell代码,需要您要么在单行上传递,要么使用^,根据本回答中描述的技术,将其小心地扩展到多行上。

@echo off
echo unzipping file...
powershell -c Expand-Archive C:path_to_zip_file -DestinationPath C:path_to_to_destination_folder; ^
$path = 'C:path_to_to_destination_folderfile.xml'; ^
(Select-Xml '//Report[@finished]' $path). ^
Node.Attributes.ForEach({ $_.Name + ' ' + $_.Value }) -join ', ' ^| ^
Set-Content C:path_to_to_destination_folderresult.txt
echo done

如果你需要基础知识方面的帮助,这里有一些PowerShell学习资源:

  • 从学习PowerShell开始。

  • 这个系列的文章,即使它早于PowerShell (Core) 6+,是一个伟大的,以食谱为导向的介绍PowerShell。

  • http://hyperpolyglot.org/shell将posix兼容的shell(如bash)与cmd.exe和PowerShell的语法以简明的表格形式并列。

相关内容

  • 没有找到相关文章

最新更新