嗨,我对Powershell很新,但是我设法编写了这个脚本,它完全符合我的要求,但是我必须遍历多个文件夹并想知道它是否完全可能,因为我似乎无法找到一个溶液
cd E:\Project_Data\Data_part1
$files = Get-ChildItem "E:\Project_Data\Data_part1\"*.xml
$MasterArray = @()
$MasterArray = "" | Select Entries
$ConcatEntries = @()
foreach ($file in $files)
{
$MasterArray.Entries += -Join "|$|"
[xml]$XMLfile = gc $file
$Entries = $XMLfile.InsuranceClaim.InfoFromVet.AnimalClinicalHistory.Entry
$ConcatEntries = @()
foreach ($Entry in $Entries)
{
$ConcatEntries += "E:\Project_Data\Data_part1\"+$file + "|^|" + $Entry.Date
+ "|^|" + $Entry.Time + "|^|" + $Entry.EnteredBy + "|^|" + $Entry.TextEntry
}
$MasterArray.Entries += $ConcatEntries -Join "|$|"
}
$MasterArray | Export-Csv -NoType "C:\Desktop\out.csv"
您可能会看到它需要输入xml文件的一个节点并将单个重复节点输出到csv文件。我希望实现类似下面的内容但是我不确定如何定义$ folders变量。对不起,如果这有点长,并提前感谢任何建议或帮助。
foreach($folder in $folders)
{
cd $folder
$files = Get-ChildItem $folder*.xml
$MasterArray = @()
$MasterArray = "" | Select Entries
$ConcatEntries = @()
foreach ($file in $files)
{
$MasterArray.Entries += -Join "|$|"
[xml]$XMLfile = gc $file
$Entries = $XMLfile.InsuranceClaim.InfoFromVet.AnimalClinicalHistory.Entry
$ConcatEntries = @()
foreach ($Entry in $Entries)
{
$ConcatEntries += $folder + $file + "|^|" + $Entry.Date + "|^|" +
$Entry.Time + "|^|" + $Entry.EnteredBy + "|^|" + $Entry.TextEntry
}
$MasterArray.Entries += $ConcatEntries -Join "|$|"
$MasterArray | Export-Csv -NoType $folder+"\"+$file+"out.csv"
}
}
答案 0 :(得分:2)
This可能有你需要的......
$folders = [IO.Directory]::GetDirectories("C:\temp","*","AllDirectories")
然后..
Foreach ($fldr in $folders) {do some stuff}
答案 1 :(得分:1)
您可以使用以下版本来定义$ folders变量:PowerShell 3.0 +:
Get-ChildItem -Path E:\Project_Data -Directory -Recurse
PowerShell 2.0:
Get-ChildItem -Path E:\Project_Data -Recurse | Where-Object {$_.Mode -Match "d"}
答案 2 :(得分:0)
如果文件位于同一目录中,只需将-recurse添加到Get-ChildItem命令,而不是在路径中指定通配符,请使用-Filter开关。
否则,请使用以下内容:
$files+= C:\someotherfolder\*.xml
答案 3 :(得分:0)
我认为您可以帮助您的选项也是添加目录的变量,因此您需要执行以下操作,以替换$Files
声明
function get-XMLfromFile{
[CmdletBinding()]
Param
(
[string]$Subfolder
)
$Files = Get-ChildItem -Path "E:\Project_Data\$Subfolder\*.xml" -Recurse
现在最后一行只是我从你回复的上述答案得到的,并且不要忘记在结尾添加另一个}
,这将使你的脚本成为一个功能。我可以努力让它让你选择要获得的文件夹,如果这会让你走向你想去的方向,但它基本上允许你改变你正在搜索的子文件夹,你不会不需要只更改脚本传递的参数。