首页 > 解决方案 > PowerShell ForEach 循环、通配符、限制具有多个子文件夹的集合内容的问题

问题描述

PowerShell 新手!当只有 1 个子文件夹(例如 C:\Desktop\Project\ChapterOne\Section1\Table1.txt)时,下面的代码效果很好。它获取所有“Table*.txt”文件(如 Table1.txt、Table2.txt、Table3.txt)的内容并将其编译为一个文件:AllTables.txt。

Get-ChildItem "$home\Desktop\Project\ChapterOne\*\"
ForEach-Object {
    New-Item -Path $home\Desktop\Project\ChapterOne\*\ -ItemType file -Name "AllTables.txt" -Force
    $basedir = "$home\Desktop\Project\ChapterOne\*\"
    $outfile = "$home\Desktop\Project\ChapterOne\*\AllTables.txt"
    Get-ChildItem $basedir -Include Table*.txt -Recurse | Get-Content | Set-Content $outfile
}

但是,当有多个子文件夹时,例如当 ChapterOne 有 2 个子文件夹 Section1 和 Section2,每个子文件夹中都有几个 Table*.txt 文件时,代码会获取 Section1 和 Section2 的所有表并将它们添加到 AllTables.txt 文件中每个子文件夹。我只想要 Section1 的 AllTables.txt 文件中的 Section1 的 Table*.txt 文件,并且只想要其 AllTables.txt 文件中的 Section2 的 Table*.txt 文件。

问题是通配符吗?即使我不知道子文件夹名称或有多少子文件夹,如何将操作限制在每个子文件夹中?

我对实现这一结果的全新方式持开放态度。我总是在这个论坛上学到很多东西。

标签: powershellforeachwildcard

解决方案


感谢@Lee_Daily,这是有效的:

$folders = get-ChildItem $home\Desktop\Project\ChapterOne -Directory
ForEach ($dir in $folders) {
    $FolderPath = $dir.FullName
    $outFile = Join-Path $FolderPath "AllTables.txt"
    $fileList = Get-ChildItem -Path $FolderPath\Table*.txt
        foreach ($file in $filelist)
        {
        Get-Content $file | Out-File -FilePath $outfile -Encoding ascii -Append
        }
    }

推荐阅读