2017-04-17 5 views
0

XMLファイルを解析し、特定のフィールドのテキストをディレクトリ内の各XMLファイルのテキストファイルに出力するスクリプトがあります。ForEach-Objectのディレクトリ除外

私は、このスクリプトで運がない特定のサブディレクトリを除外しようとしています。私はちょうどこの作品

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

を実行すると

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" 
    } 
} 

返されたファイルリストが除外されたディレクトリを表示しません。また、除外ディレクトリの子項目のいずれかを示してい、そのスクリプト全体の意図です。

私は除外のためにいくつかの方法を試しましたが、すべて失敗しました。これは私が働くソリューションに最も近いものです。

+0

「除外されたディレクトリの子アイテムは表示されません」 - 少し奇妙です。関数を呼び出すために使用するステートメントを表示できますか? –

+0

@Mathias -srcdirをXMLに変換します。\ -destdir。\ XMLOUTPUT – GreatMagusKyros

+0

が機能 –

答えて

1

DirectoryNameが一致することはありません\例:。

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

あなたは絶対パスへの相対パスに変換する必要があります。例:

+0

内の最初のものとして、 '$ DESTDIR =(解決-パス$ DESTDIR).Path'を行い、ここでの意図は、上でこれを持っていることですフラッシュドライブのルート上にある特定のディレクトリを除外しながら、フラッシュドライブのルートに対して実行できるようにすることで、どのマシンに接続しても問題なく使用できるようにします。 – GreatMagusKyros

+0

これをやめるのを止めることは何もありません。 'xml-convert -destdir。\ desktop'は問題ありませんが、スクリプト自体を' DirectoryName'プロパティとマッチさせるために絶対パスに変換する必要があります。 'Resolve-Path'はあなたのフラッシュドライブ上で参照する文字/パスに変換します –

+0

私は今見ています。ありがとう、それはより意味をなさないそのように説明されるとき! – GreatMagusKyros

関連する問題