ForEach 对象中的目录排除
Directory Exclusion in ForEach-Object
我有一个脚本可以解析 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}
返回的文件列表不显示排除目录,也不显示排除目录的任何子项,这是整个脚本的意图。
我尝试了几种排除方法,但都失败了。这是我最接近可行的解决方案。
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"
}
}
我有一个脚本可以解析 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}
返回的文件列表不显示排除目录,也不显示排除目录的任何子项,这是整个脚本的意图。
我尝试了几种排除方法,但都失败了。这是我最接近可行的解决方案。
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"
}
}