Powershell -递归收集文件内容和名称并输出CSV

pcww981p  于 2023-01-09  发布在  Shell
关注(0)|答案(2)|浏览(134)

我在不同的子文件夹中有多个XML文件,我希望使用Powershell将它们转换为CSV,并使用原始文件名将它们输出到不同的文件夹中。

$xmlfilepaths = Get-ChildItem -Path "\\path\to\files\" -Recurse | where {$_.Name -like '*.xml'}
foreach ($xmlpath in $xmlfilepaths.FullName)
{
    $xmlcontent = Get-Content -Path $xmlpath
}

这部分工作,但我想做的是输出这些CSV的到另一个文件夹,并保持原来的XML文件的文件名作为文件名。
\路径\到\文件\阿尔法\测试123.xml-〉\路径\到\输出\文件\测试123.csv\路径\到\文件\布拉沃\生产789.xml-〉\路径\到\输出\文件\生产789.csv
我的问题是,一旦进入“foreach”,如何从$xmlpath或$xmlfilepaths变量中“拉”出文件名并传递它沿着以使我的文件名输入与文件名输出相同?

iszxjhcz

iszxjhcz1#

原始文件名包含在$xmlfilepaths中存储的每个对象的Name特性中。
将变量重命名为更准确的名称可能有助于使操作更明显:

$xmlFiles = Get-ChildItem -Path "\\path\to\files\" -Recurse -File -Filter *.xml

foreach ($xmlFile in $xmlFiles)
{
    $xmlContent = Get-Content -Path $xmlFile.FullName

    # !!!
    # do what you need to do to convert the XML to CSV
    # !!!

    # construct new file name and write output file
    $newFileName = $xmlFile.Name -replace '.xml$','.csv'
    $outputPath = Join-Path '\path\to\output\files' $newFileName
    $xmlContent |Set-Content $outputPath
}
wpx232ag

wpx232ag2#

要获取新文件名,请使用以下命令:

$filename = "\path\to\files\alpha\testing123.xml"
$basename = $filename.Substring($Filename.LastIndexOf("\") + 1)
$basename = $basename.SubString(0, $basename.LastIndexOf("."))
Write-Host $basename
$newName = "\path\to\output\files\" + $basename + ".csv"
Write-Host $newname

相关问题