powershell - 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
}
}
推荐阅读
- python - 我应该在哪里实施我的碰撞检查方法?
- ios - 警卫让字典解包失败
- python - 使用 Xarray 的 apply_ufunc 在 3D 数组的时间维度上应用 Numba guvectorize 函数
- excel - Laravel excel 导出到预制模板 maatwebsite/Laravel-Excel
- sql - 控制台注销时获取空白数组导致nodejs mysql
- jquery - 查找 TR 内的所有 TD 元素并使用 jquery 应用背景颜色
- google-cloud-debugger - 如何通过 Django 在 Cloud Run 上使用 Google Cloud Debugger
- html - 无法将我的幻灯片菜单添加到我的主文件 css/html
- c++ - PCL MLS-Processing:无输出点云
- ios - 如何在 swift 5 中检查多个字符串不是 nil 并且不是空的?