将当前文件夹下所有的 .txt
文件按照文件名中的数字进行自然排序(如 1.txt
, 2.txt
, 10.txt
),然后按顺序合并成一个名为 merged.txt
的文件,并且确保使用 UTF-8 编码,避免出现中文乱码问题。
PowerShell 脚本:
$files = [System.IO.Directory]::GetFiles((Get-Location).Path, "*.txt") | Sort-Object { [int]($_ -replace '\D+', '') }
foreach ($file in $files) {
Get-Content $file -Encoding UTF8 | Add-Content -Encoding UTF8 merged.txt
}
🔹 第一部分:获取并排序所有 .txt
文件
$files = \[System.IO.Directory\]::GetFiles((Get-Location).Path, "\*.txt") | Sort-Object { \[int\]($\_ -replace '\\D+', '') }
这行代码的意思是:
- 使用
[System.IO.Directory]::GetFiles(...)
获取当前目录下所有 .txt
文件。
(Get-Location).Path
表示当前 PowerShell 所在的路径。
- 然后通过管道
|
将这些文件传给 Sort-Object
命令进行排序。
- 在排序时,用正则表达式
$_ -replace '\D+', ''
把文件名中所有非数字字符去掉,只保留数字。
- 再将这个结果转换为整数
[int]()
,这样就能正确地按数字大小排序了。
- 最终排序后的文件列表会保存在
$files
变量中。
举个例子:
- 如果文件名是
1.txt
, 10.txt
, 2.txt
- 默认情况下 PowerShell 会按字符串顺序排成
1.txt
, 10.txt
, 2.txt
- 但加上这个排序逻辑之后,它会变成
1.txt
, 2.txt
, 10.txt
,这才是我们想要的顺序。
🔹 第二部分:逐个读取内容并写入合并文件
foreach ($file in $files) {
Get-Content $file -Encoding UTF8 | Add-Content -Encoding UTF8 merged.txt
}
这部分代码的意思是:
- 遍历之前已经排序好的每一个
.txt
文件。
- 使用
Get-Content
命令读取文件内容,并指定编码为 UTF-8,以支持中文等字符。
- 然后通过
Add-Content
把读取到的内容追加写入到 merged.txt
中。
- 因为使用的是
Add-Content
而不是 Set-Content
,所以每次写入不会覆盖之前的内容,而是添加在后面。
✅ 总结一下整个脚本的功能:
- 找出当前目录下的所有
.txt
文件
- 把它们按文件名中的数字进行正确的排序
- 依次读取每个文件的内容
- 把这些内容追加写入到
merged.txt
文件中
- 使用 UTF-8 编码,防止出现中文乱码请发给我一键合并 TXT 的绿色工具包