文章目录

PowerShell 文件操作:Get-Content、Set-Content

发布于 2026-04-07 08:04:25 · 浏览 11 次 · 评论 0 条

PowerShell 文件操作:Get-Content、Set-Content

Get-Content 负责读取文件内容,Set-Content 负责写入或覆盖文件内容。两者配合管道符可快速完成日志提取、配置替换与批量数据处理。


一、 读取文件:Get-Content 精准提取

  1. 打开 PowerShell 终端。通过 Windows 开始菜单或运行对话框启动命令行环境。
  2. 定位目标文件路径。使用 cd 命令切换工作目录,或直接使用完整路径指向待处理文件。
  3. 执行基础读取命令。输入完整指令,系统会逐行输出文件内的全部文本:
    Get-Content -Path ".\log.txt"
  4. 限制读取行数。文件体积较大时,使用 -TotalCount 参数仅提取前 N 行。输入指令即可快速查看头部配置:
    Get-Content -Path ".\config.ini" -TotalCount 10
  5. 抓取末尾数据。排查线上问题通常只需最新记录。使用 -Tail 参数反向提取,直接显示最后五十行:
    Get-Content -Path ".\app.log" -Tail 50
  6. 修正乱码显示。输出结果若为乱码,说明系统默认编码与文件不匹配。追加 -Encoding UTF8 参数强制按对应字符集解析文本。

二、 写入文件:Set-Content 覆盖生成

  1. 准备待写入的数据。数据可以是纯文本字符串、已赋值的变量,或前序命令的输出结果。
  2. 执行覆盖写入。输入完整指令,命令会直接清空原文件内容(若文件不存在则自动新建)并填入指定数据:
    Set-Content -Path ".\new_report.txt" -Value "系统巡检完成"
  3. 批量写入多行。PowerShell 会自动将数组的每个元素输出为独立行。执行脚本即可生成三行状态记录:
    $data = "服务器A: 正常", "服务器B: 告警", "服务器C: 离线"
    Set-Content -Path ".\status.txt" -Value $data
  4. 统一输出编码。指定 -Encoding UTF8-Encoding Default 参数,确保生成的文本文件符合下游程序的读取规范。

三、 常用参数速查

参数名称 适用命令 核心作用
-Path 两者通用 指定文件或文件夹的完整路径
-TotalCount Get-Content 仅读取前 N 行,跳过后续内容以节省内存
-Tail Get-Content 仅读取末尾 N 行,快速追踪最新动态
-Value Set-Content 指定需要写入的具体文本或数据对象
-Encoding 两者通用 定义文本字符集(如 UTF8Unicode

四、 组合实战:管道符高效处理

管道(Pipe,符号为 |)负责将左侧命令的输出结果,直接作为右侧命令的输入源,免去临时文件的读写开销。

  1. 替换文件内的指定文本。结合读取命令与字符串替换逻辑,直接重写文件。系统逐行扫描旧文件,替换匹配词汇后直接写入新文件:
    Get-Content -Path ".\old.txt" | ForEach-Object { $_ -replace "旧IP", "新IP" } | Set-Content -Path ".\new.txt" -Encoding UTF8
    ```
    2. **筛选**关键日志并独立保存。使用 `Where-Object`(可简写为 `?`)过滤包含特定关键字的行。输入指令即可精准提取所有错误行:
    ```powershell
    Get-Content -Path ".\server.log" -Encoding UTF8 | Where-Object { $_ -match "Error" } | Set-Content -Path ".\errors.log"
  2. 追加数据至文件末尾。默认情况下 Set-Content 会擦除原有全部内容。若需保留历史数据并在末尾新增内容,切换Add-Content 命令。该命令的语法结构与写入命令完全一致,仅修改动词即可生效。

五、 避坑指南:性能与内存边界

  1. 评估文件体积。Get-Content 默认将完整文件一次性载入运行内存。处理超过两 GB 的巨型日志时,可能触发内存溢出错误(Out of Memory)。超大文件改用 Select-String 命令或调用底层 .NETStreamReader 对象进行流式读取。
  2. 释放文件锁。多个进程同时读写同一文件时,终端会抛出“进程正在使用此文件”的异常。添加 -ReadCount 参数分块处理(例如 Get-Content -Path ".\huge.csv" -ReadCount 1000),按批次读取可大幅降低文件锁定冲突。
  3. 包裹特殊路径。路径字符串中包含空格、中文字符或特殊符号(如 &#)时,必须使用英文双引号 "" 或单引号 '' 将完整路径括起来,否则解释器会截断命令并抛出参数解析错误。

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文