Windows怎么用PowerShell读写文本文件_Windows如何用Get-Content和Set-Content处理文件内容【基础】-1

如果您需要在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。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。