📄 PowerShell - 文件 I/O 操作

PowerShell 提供了丰富的命令用于对文件内容进行读取(Input)和写入(Output)操作,支持简单的文本处理,也可以进行高性能的流式读写。


一、读取文件内容(Input)

1. Get-Content —— 读取文本文件内容

📌 作用

逐行读取文件内容,默认返回字符串数组。

📘 命令格式

Get-Content [-Path] <string> [-Encoding <string>] [-TotalCount <int>] [-Tail <int>]

📘 常用参数

参数 说明
-Path 文件路径
-Encoding 指定字符编码(UTF8、ASCII等)
-TotalCount 只读取前 N 行
-Tail 只读取最后 N 行(类似 tail
-Raw 读取为一个完整字符串而非逐行数组

✅ 示例

Get-Content "log.txt"                       # 逐行读取
Get-Content "log.txt" -TotalCount 10       # 读取前 10 行
Get-Content "log.txt" -Tail 5              # 读取最后 5 行
Get-Content "log.txt" -Raw                 # 整个内容为一个字符串

2. 使用 StreamReader(适用于大文件)

$reader = [System.IO.StreamReader]::new("bigfile.txt")
while (!$reader.EndOfStream) {
    $line = $reader.ReadLine()
    Write-Output $line
}
$reader.Close()

二、写入文件内容(Output)

1. Set-Content —— 写入并覆盖文件

📌 作用

将数据写入文件,如果文件已存在会覆盖内容。

📘 命令格式

Set-Content -Path <string> -Value <string[]> [-Encoding <string>]

✅ 示例

Set-Content -Path "output.txt" -Value "Hello World"

2. Add-Content —— 向文件追加内容

📌 作用

不覆盖原文件,追加内容到文件末尾。

Add-Content -Path "output.txt" -Value "Another Line"

3. Out-File —— 将命令输出写入文件

📌 作用

用于将管道的输出写入文件,常与管道 | 结合。

📘 命令格式

<command> | Out-File -FilePath <string> [-Append] [-Encoding <string>]

✅ 示例

Get-Process | Out-File -FilePath "process.txt"

三、其他相关命令

1. Clear-Content —— 清空文件内容

Clear-Content -Path "log.txt"

2. Export-Csv / Import-Csv —— 操作结构化 CSV 数据

✅ 导出对象到 CSV

Get-Process | Select-Object Name, Id | Export-Csv -Path "procs.csv" -NoTypeInformation

✅ 从 CSV 读取为对象

$data = Import-Csv -Path "procs.csv"
$data[0].Name

3. ConvertTo-Json / ConvertFrom-Json —— JSON 文件处理

✅ 导出 JSON

Get-Date | ConvertTo-Json | Set-Content "date.json"

✅ 读取 JSON

$json = Get-Content "date.json" -Raw | ConvertFrom-Json
$json.DayOfWeek

四、实用技巧与组合

1. 写入带时间戳的日志

$time = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Add-Content -Path "log.txt" -Value "$time - Task completed"

2. 读取某文件并替换内容

(Get-Content "notes.txt") -replace "old", "new" | Set-Content "notes.txt"

3. 批量处理多个文件内容

Get-ChildItem *.txt | ForEach-Object {
    $content = Get-Content $_.FullName
    # 处理逻辑...
}

五、常用编码类型说明

编码名称 说明
ASCII 美国标准字符编码
UTF8 推荐使用,兼容性强
Unicode UTF-16 编码
OEM 控制台默认编码(可能乱码)

六、命令总结表

命令 说明
Get-Content 读取文本文件内容
Set-Content 写入文件(覆盖原内容)
Add-Content 追加内容到文件末尾
Out-File 将命令输出写入文件
Clear-Content 清空文件内容
Export-Csv 将对象导出为 CSV 文件
Import-Csv 从 CSV 文件读取为对象集合
ConvertTo-Json 将对象转换为 JSON 格式
ConvertFrom-Json 从 JSON 字符串转换为对象
[StreamReader] 用于高效逐行读取大文件内容
posted @ 2025-06-29 18:19  kyle_7Qc  阅读(270)  评论(0)    收藏  举报