如何按名称顺序连接目录中所有文件的内容?

l--*_*''' 0 powershell concatenation

我有一堆文本文件,需要将它们连接成 1 个字符串:

在此输入图像描述

最终结果是内容的串联20211026_113900.sql + 20211027_083900.sql + 20211027_093900.sql

我们如何连接文件的内容以确保按字母顺序排列?

20211026_113900.sql

从 mytable1 中选择名称 GO

20211027_083900.sql

从 mytable2 GO 中选择名称

20211027_093900.sql

从 mytable3 GO 中选择名称

我期待的最终结果是:

从 mytable1 中选择名称 GO 从 mytable2 中选择名称 GO 从 mytable3 中选择名称 GO

Mat*_*sen 5

使用以下命令枚举所有文件Get-ChildItem

$files = Get-ChildItem -Path path\to\Scripts -File -Filter *.sql 
Run Code Online (Sandbox Code Playgroud)

文件系统提供程序已经按排序顺序返回它们,但是Sort-Object如果您更舒服,您可以使用名称显式对它们进行排序:

$files = $files |Sort-Object -Property Name
Run Code Online (Sandbox Code Playgroud)

最后使用Get-Content -Raw将文件内容读入内存,并使用-join运算符将​​它们连接起来:

$concatenated = @(
    $files |Get-Content -Raw
) -join [Environment]::NewLine
Run Code Online (Sandbox Code Playgroud)

$concatenated现在包含一个多行字符串,其中所有文件的内容*.sql均以换行符分隔

替换[Environment]::NewLine' '将它们连接到与前一个文件相同的行,或-join在一元模式下使用:

$concatenated = -join @(
    $files |Get-Content -Raw
)
Run Code Online (Sandbox Code Playgroud)

  • 做得很好(“如果它让你更舒服”是一个很好的接触:)。至于一元“-join”解决方案/使用换行符连接:鉴于“-Raw”也返回文件的尾随换行符,并且文本文件_通常_具有尾随换行符,一元“-join”可能会导致_no_同一行上的内容,相反,使用换行符连接可能会导致各个文件的内容之间出现空行。像 `($files |Get-Content -Raw).TrimEnd("\`r\`n") -join [Environment]::NewLine` 这样的东西会导致可预测的分离。 (2认同)