ForEach-Object中的目录排除

时间:2017-04-17 19:37:35

标签: xml powershell filter exclusionpath

我有一个脚本可以解析XML文件,并将特定字段的文本输出到目录中每个XML文件的文本文件中。

我现在正试图让这个脚本排除一个没有运气的特定子目录。

function xml-convert ($srcdir, $destdir) {
  gci $srcdir -r -Filter *.xml | ? {
    $_.DirectoryName -ne $destdir
  } | ForEach-Object{
    $extract = Get-Content $_.FullName

    $newname = Get-Item $_.FullName | % {$_.BaseName}

    $xml = [xml] $extract

    $xml.PortalAutoTextExport.AutoText.ContentText |
      Out-File -FilePath "$destdir\$newname.txt"
  }
}

当我只运行这件作品时

gci $srcdir -r -Filter *.xml | ? {$_.DirectoryName -ne $destdir}

返回的文件列表不显示排除目录,也不显示排除目录的任何子项,这是整个脚本的意图。

我已经尝试了几种排除方法,但都失败了。这是我最接近工作解决方案。

1 个答案:

答案 0 :(得分:1)

DirectoryName永远不会匹配。\例如:

(dir .\Desktop -File).DirectoryName
C:\Users\frode\Desktop
C:\Users\frode\Desktop
C:\Users\frode\Desktop

您需要将相对路径转换为绝对路径。例如:

function xml-convert ($srcdir, $destdir) {
    $absolutedest = (Resolve-Path $destdir).Path

    Get-ChildItem -Path $srcdir -Recurse -Filter *.xml | Where-Object {
        $_.DirectoryName -ne $absolutedest
    } | ForEach-Object{
        $extract = Get-Content $_.FullName

        $newname = Get-Item $_.FullName | % {$_.BaseName}

        $xml = [xml] $extract

        $xml.PortalAutoTextExport.AutoText.ContentText |
        Out-File -FilePath "$absolutedest\$newname.txt"
    }
}