将子文件夹文件合并为一个文件(不包括当前文件夹文件)

Combine subfolder files into one file (excluding current folder files)

我想将子文件夹中所有文件的内容合并到一个文件中。但是,我想从该搜索中排除根文件夹。

我非常接近以下命令:

Get-ChildItem -include *.sql -rec | ForEach-Object {gc $_; ""} | out-file final.sql

问题在于,由于 foreach 是递归的,它还会找出输出文件 (final.sql),这会造成无限循环。这个 powershell 命令永远不会结束,final.sql 文件会随着时间变得越来越大。

如何从搜索中排除当前目录?

重要提示:我不想明确提及路径,因为不同的用户会有不同的文件系统。

试试这个:

$mainPath    = 'C:\files\test'
$directories = Get-ChildItem -Path $mainPath -Directory
$destFile    = $mainPath + '\final.sql'

Remove-Item -Path $destFile -ErrorAction SilentlyContinue | Out-Null

foreach( $directory in $directories ) {

    Get-ChildItem -Path $directory.FullName -include *.sql -rec | ForEach-Object {gc $_; ""} | Out-File $destFile -Append

}

用户f6a4回答正确,但如果不想使用全限定目录名,最好使用这个版本:

$directories = Get-ChildItem -Path $mainPath -Directory
Remove-Item -Path final.sql -ErrorAction SilentlyContinue | Out-Null

foreach( $directory in $directories ) {
    Get-ChildItem -Path $directory.FullName -include *.sql -rec | ForEach-Object {gc $_; ""} | Out-File final.sql -Append
}

您可以通过创建以下 .ps1 文件,使用 powershell 运行 此文件:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& './GlobalVersionPowershellBatch.ps1'"