You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中按文件名匹配CSV值批量替换多文件字符串

解决方案

核心思路

先把CSV里的姓名-数值对应关系转成哈希表,方便快速查找;接着遍历所有目标TXT文件,用文件名(不含扩展名)匹配哈希表里的姓名,找到对应数值后替换文件里的number内容。

完整代码

# 1. 定义CSV文件路径和TXT文件所在目录
$csvPath = "C:\path\to\your\data.csv"
$txtDir = "C:\path\to\your\txt\files"

# 2. 读取CSV并转换为哈希表(姓名为键,数值为值)
$nameNumberMap = @{}
Import-Csv -Path $csvPath | ForEach-Object {
    $nameNumberMap[$_.name] = $_.number
}

# 3. 遍历所有TXT文件,匹配替换
Get-ChildItem -Path $txtDir -Filter "*.txt" -Recurse | ForEach-Object {
    # 获取文件名(不含扩展名,即姓名)
    $fileName = $_.BaseName
    # 检查哈希表中是否存在对应姓名
    if ($nameNumberMap.ContainsKey($fileName)) {
        $targetNumber = $nameNumberMap[$fileName]
        # 替换文件内容并保存
        (Get-Content -Path $_.FullName -Raw) -replace 'number', $targetNumber | Set-Content -Path $_.FullName
        Write-Host "已更新文件: $($_.FullName),替换为数值: $targetNumber"
    } else {
        Write-Host "未找到对应姓名的数值,跳过文件: $($_.FullName)"
    }
}

关键步骤说明

  • 哈希表转换:把CSV数据转成哈希表后,通过姓名查找数值的效率更高,适合处理大量文件的场景。
  • 文件名提取:用$_.BaseName直接获取不带.txt扩展名的文件名,刚好对应CSV里的name列。
  • 批量替换:用-Raw参数读取文件内容可以一次性处理整个文件,比逐行读取效率更高。

你之前代码的问题

  • 第一段代码:硬编码了替换值MyValue,没有和CSV里的姓名关联,所以只能统一替换成同一个值,无法实现匹配对应数值的需求。
  • 第二段代码:通过Read-Host手动输入每个文件的替换值,完全依赖人工操作,无法实现自动化批量处理。

内容的提问来源于stack exchange,提问作者John London

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:25:15