You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用PowerShell批量处理CSV文件:添加列并修改列值

PowerShell批量处理坐标格式转换脚本

Hey there! Since you're new to PowerShell, I'll walk you through a complete, easy-to-follow script that handles your batch CSV conversion task. Let's break this down simply:

需求回顾

You have tons of CSV files (though they look like space-separated coordinate pairs) in this format:

X1,Y1 X2,Y2 … Xn,Yn

And you want to convert each pair to X,N-Y,序号 where:

  • N is a fixed value (like 65536)
  • 序号 starts at 1 and increments for each pair in the line

完整脚本

Here's a ready-to-use script with comments explaining every part:

# -------------------------- 配置参数 --------------------------
# 设置你的固定N值,比如65536
$targetN = 65536
# 设置输入CSV文件所在的文件夹路径(可以用绝对路径,比如 "C:\MyCoords\Input")
$inputFolder = ".\InputCSVs"
# 设置处理后文件的输出文件夹(会自动创建,如果不存在的话)
$outputFolder = ".\OutputCSVs"

# -------------------------- 初始化准备 --------------------------
# 创建输出文件夹(如果不存在)
if (-not (Test-Path -Path $outputFolder)) {
    New-Item -ItemType Directory -Path $outputFolder | Out-Null
}

# -------------------------- 批量处理文件 --------------------------
# 获取输入文件夹里所有的CSV文件
$csvFiles = Get-ChildItem -Path $inputFolder -Filter "*.csv" -File

if ($csvFiles.Count -eq 0) {
    Write-Host "⚠️ 没有找到任何CSV文件,请检查输入文件夹路径!"
    exit
}

foreach ($file in $csvFiles) {
    Write-Host "正在处理文件:$($file.Name)"
    
    # 读取文件内容(支持单行或多行坐标对)
    $content = Get-Content -Path $file.FullName -Raw
    
    # 分割内容为单个坐标对(按空格分割,忽略空值)
    $coordinatePairs = $content -split "\s+" | Where-Object { $_ -ne "" }
    
    # 如果没有坐标对,跳过当前文件
    if ($coordinatePairs.Count -eq 0) {
        Write-Host "⚠️ 文件$($file.Name)没有有效坐标对,跳过"
        continue
    }
    
    # 处理每个坐标对,生成新的格式
    $processedPairs = @()
    $index = 1
    foreach ($pair in $coordinatePairs) {
        # 拆分X和Y值(按逗号分割)
        $x, $y = $pair -split ","
        
        # 计算N-Y的值(兼容整数和小数)
        $newY = $targetN - [double]$y
        
        # 生成新的格式字符串:X,N-Y,序号
        $processedPair = "$x,$newY,$index"
        
        # 添加到结果数组
        $processedPairs += $processedPair
        
        # 序号自增
        $index++
    }
    
    # 把处理后的数组拼接成空格分隔的字符串
    $outputContent = $processedPairs -join " "
    
    # 生成输出文件路径(和原文件名相同,存到输出文件夹)
    $outputPath = Join-Path -Path $outputFolder -ChildPath $file.Name
    
    # 写入输出文件
    $outputContent | Out-File -Path $outputPath -Encoding UTF8
    
    Write-Host "✅ 文件$($file.Name)处理完成,已保存到:$outputPath"
}

Write-Host "🎉 所有文件处理完成!"

怎么使用这个脚本

  1. 打开记事本,把上面的代码粘贴进去
  2. 修改三个配置参数:
    • $targetN:改成你需要的固定值(比如65536)
    • $inputFolder:改成你的CSV文件所在的文件夹路径(比如"C:\MyFiles\Coords"
    • $outputFolder:改成你想保存处理后文件的路径(比如"C:\MyFiles\ProcessedCoords"
  3. 保存文件,后缀名改成.ps1(比如ConvertCoords.ps1
  4. 打开PowerShell,导航到脚本所在的文件夹(比如cd C:\MyScripts
  5. 运行脚本:. .\ConvertCoords.ps1(注意第一个点后面有空格)

额外说明

  • 如果你的CSV文件有多行,这个脚本也能处理:每行的坐标对会单独处理,序号每行重新从1开始
  • 脚本会自动跳过空文件或者没有有效坐标对的文件
  • 如果你的坐标值都是整数,把[double]改成[int]也可以,不影响结果

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

火山引擎 最新活动