我想将子文件夹中所有文件的内容合并到一个文件中。但是,我想从搜索中排除根文件夹。
我与以下命令非常接近:
Get-ChildItem -include *.sql -rec | ForEach-Object {gc $_; ""} | out-file final.sql
问题在于,由于foreach是递归的,因此它还会找出输出文件(final.sql),从而创建一个无限循环。该powershell命令永远不会结束,并且final.sql文件会随着时间的流逝而变得越来越大。
如何从搜索中排除当前目录?
重要:我不想明确提及路径,因为不同的用户将拥有不同的文件系统。
答案 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'"