将子文件夹文件合并为一个文件(当前文件夹文件除外)

时间:2019-12-04 14:50:36

标签: powershell powershell-5.0

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

我与以下命令非常接近:

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

问题在于,由于foreach是递归的,因此它还会找出输出文件(final.sql),从而创建一个无限循环。该powershell命令永远不会结束,并且final.sql文件会随着时间的流逝而变得越来越大。

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

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

2 个答案:

答案 0 :(得分:2)

尝试一下:

$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

}

答案 1 :(得分:0)

用户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'"