
如果您需要在Windows系统中通过命令行方式读取或修改文本文件内容,PowerShell提供了简洁高效的内置命令。以下是使用Get-Content和Set-Content处理文本文件内容的基础操作步骤:
一、使用Get-Content读取文本文件
Get-Content命令用于从指定路径的文本文件中提取全部或部分内容,并将其输出到控制台或赋值给变量。它默认以字符串数组形式逐行读取,适合处理日志、配置等纯文本数据。
1、打开PowerShell窗口(以管理员身份或普通用户身份均可,取决于目标文件访问权限)。
2、输入命令:Get-Content -Path “C:\example.txt”,其中路径需替换为实际存在的文本文件绝对路径。
3、如需仅显示前5行,追加参数:-TotalCount 5,完整命令为:Get-Content -Path “C:\example.txt” -TotalCount 5。
4、若文件编码非UTF-8(如GB2312或UTF-8 BOM格式),需显式指定编码:Get-Content -Path “C:\example.txt” -Encoding Default(Default对应系统ANSI编码)或-Encoding UTF8。
二、使用Set-Content写入或覆盖文本文件
Set-Content命令将指定内容写入目标文件,若文件已存在则**完全覆盖原有内容**,不保留原文件任何数据。适用于初始化配置、生成报告等场景。
1、输入命令:Set-Content -Path “C:\output.txt” -Value “第一行内容”,该命令将在指定路径创建新文件并写入单行文本。
2、写入多行内容时,可将字符串数组作为Value参数:Set-Content -Path “C:\output.txt” -Value @(“第一行”, “第二行”, “第三行”)。
3、若需追加内容而非覆盖,不能使用Set-Content,应改用Add-Content命令。
4、写入时指定编码格式可避免中文乱码:Set-Content -Path “C:\output.txt” -Value “测试文本” -Encoding UTF8。
三、结合Get-Content与Set-Content实现内容替换
通过管道将Get-Content读取的内容传递给Set-Content前的处理逻辑,可完成查找替换、过滤、格式转换等操作。整个过程不依赖外部工具,全部在PowerShell内部完成。
1、读取文件内容后替换所有“旧文本”为“新文本”,再写回原文件:Get-Content “C:\data.txt” | ForEach-Object { $_ -replace “旧文本”, “新文本” } | Set-Content “C:\data.txt”。
2、仅保留包含特定关键词的行(如含“error”的日志行):Get-Content “C:\log.txt” | Where-Object { $_ -match “error” } | Set-Content “C:\filtered.log”。
3、将文件每行首尾添加固定字符(例如添加方括号):Get-Content “C:\list.txt” | ForEach-Object { “[$_]”} | Set-Content “C:\formatted.txt”。
四、使用Out-File替代Set-Content进行更精细的输出控制
Out-File命令提供比Set-Content更丰富的输出选项,例如自动换行宽度、追加模式、字符编码及错误抑制,适合对输出格式有明确要求的场景。
1、将命令结果保存为UTF-8编码文件(无BOM):Get-Content “C:\input.txt” | Out-File -FilePath “C:\result.txt” -Encoding utf8NoBOM。
2、以追加方式写入内容(不覆盖原文件):”新增一行” | Out-File -FilePath “C:\append.txt” -Append。
3、限制每行最大宽度为80字符(自动换行):Get-Content “C:\text.txt” | Out-File -FilePath “C:\wrapped.txt” -Width 80。
五、处理大文件时的内存优化方法
当文本文件体积较大(如超过100MB),直接使用Get-Content加载全部内容可能导致内存占用过高甚至失败。此时应采用逐行流式处理策略,避免一次性读入全部数据。
1、使用Get-Content -ReadCount 1000分批次读取(每次1000行),减少内存峰值:Get-Content “C:\bigfile.txt” -ReadCount 1000 | ForEach-Object { $_ | Where-Object { $_ -match “keyword” } } | Set-Content “C:\filtered.txt”。
2、利用System.IO.StreamReader类手动逐行读取:$reader = [System.IO.File]::OpenText(“C:\bigfile.txt”); while (($line = $reader.ReadLine()) -ne $null) { if ($line -match “target”) { Write-Output $line } }; $reader.Close()。
3、对超大日志文件进行计数统计(如统计含“fail”的行数),使用Measure-Object配合管道:Get-Content “C:\huge.log” -ReadCount 5000 | ForEach-Object { $_ -match “fail” } | Measure-Object -Sum。

评论(0)