如何解决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 文件。
问题是通配符吗?即使我不知道子文件夹名称或有多少个,如何将操作限制在每个子文件夹中?
我对实现这一结果的全新方式持开放态度。我总是在这个论坛上学到很多东西。
解决方法
感谢@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
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。