Powershell:将 xml 转换为 csv 时添加路径、文件名、文件大小和文件日期
Powershell: Add path, filename, filesize and filedate when converting xml to csv
我是脚本新手;尝试创建一个 powershell 脚本,该脚本将读取 XMLs 并根据其内容创建 CSV。
目录结构如下:
c:\path\to\files
里面有2个文件夹:
文件夹A
文件夹 B
以上每一个里面都有几个子文件夹,每个子文件夹有一个或多个 XML 个文件。
每个 XML 文件依次可以有 1 个或多个 "records"。
到目前为止我有以下内容:
Get-ChildItem 'C:\path\to\files\*.xml' -Recurse | ForEach-Object {
[xml]$xml = Get-Content $_.FullName
$xml.SelectNodes('//File') |
Select-Object
} | Export-Csv 'C:\path\to\files\processed.csv' -NoType -Delimiter ';'
这有效并创建了一个 CSV 文件,其中包含所有 XML 个文件的内容。
我现在想做的是让上面的脚本为每个文件添加以下信息:
路径(即 c:\path\to\files\FolderA\Subfolder1)
文件名(即 File1.xml)
文件大小(即 64 字节)
文件日期(即创建于 2018 年 1 月 1 日)
这些应该是csv中的第一个数据,然后是XML数据;类似于:
"path";"filename";"filesize";"filedate";"xmlroot";"xmlchild";"xmlsubchild"
如前所述,我的当前脚本已经有了 xmlroot、xmlchild、xmlsubchild,我只需要在脚本前面加上文件信息。
如果当前脚本无法做到这一点,我很乐意接受其他建议:)
提前致谢。
使用Select-Object
抓取节点时使用一组计算属性:
Get-ChildItem 'C:\path\to\files\*.xml' -Recurse | ForEach-Object {
$file = $_
[xml]$xml = Get-Content $file.FullName
$xml.SelectNodes('//File') |
Select-Object @{Name='path';Expression={$file.FullName}},@{Name='filename';Expression={$file.Name}},@{Name='filesize';Expression={$file.Length}},@{Name='filedate';Expression={$_.CreationTime}},*
} | Export-Csv 'C:\path\to\files\processed.csv' -NoType -Delimiter ';'
我是脚本新手;尝试创建一个 powershell 脚本,该脚本将读取 XMLs 并根据其内容创建 CSV。
目录结构如下:
c:\path\to\files
里面有2个文件夹:
文件夹A
文件夹 B
以上每一个里面都有几个子文件夹,每个子文件夹有一个或多个 XML 个文件。
每个 XML 文件依次可以有 1 个或多个 "records"。
到目前为止我有以下内容:
Get-ChildItem 'C:\path\to\files\*.xml' -Recurse | ForEach-Object {
[xml]$xml = Get-Content $_.FullName
$xml.SelectNodes('//File') |
Select-Object
} | Export-Csv 'C:\path\to\files\processed.csv' -NoType -Delimiter ';'
这有效并创建了一个 CSV 文件,其中包含所有 XML 个文件的内容。
我现在想做的是让上面的脚本为每个文件添加以下信息:
路径(即 c:\path\to\files\FolderA\Subfolder1)
文件名(即 File1.xml)
文件大小(即 64 字节)
文件日期(即创建于 2018 年 1 月 1 日)
这些应该是csv中的第一个数据,然后是XML数据;类似于:
"path";"filename";"filesize";"filedate";"xmlroot";"xmlchild";"xmlsubchild"
如前所述,我的当前脚本已经有了 xmlroot、xmlchild、xmlsubchild,我只需要在脚本前面加上文件信息。
如果当前脚本无法做到这一点,我很乐意接受其他建议:)
提前致谢。
使用Select-Object
抓取节点时使用一组计算属性:
Get-ChildItem 'C:\path\to\files\*.xml' -Recurse | ForEach-Object {
$file = $_
[xml]$xml = Get-Content $file.FullName
$xml.SelectNodes('//File') |
Select-Object @{Name='path';Expression={$file.FullName}},@{Name='filename';Expression={$file.Name}},@{Name='filesize';Expression={$file.Length}},@{Name='filedate';Expression={$_.CreationTime}},*
} | Export-Csv 'C:\path\to\files\processed.csv' -NoType -Delimiter ';'