使用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:
Nis 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 "🎉 所有文件处理完成!"
怎么使用这个脚本
- 打开记事本,把上面的代码粘贴进去
- 修改三个配置参数:
$targetN:改成你需要的固定值(比如65536)$inputFolder:改成你的CSV文件所在的文件夹路径(比如"C:\MyFiles\Coords")$outputFolder:改成你想保存处理后文件的路径(比如"C:\MyFiles\ProcessedCoords")
- 保存文件,后缀名改成
.ps1(比如ConvertCoords.ps1) - 打开PowerShell,导航到脚本所在的文件夹(比如
cd C:\MyScripts) - 运行脚本:
. .\ConvertCoords.ps1(注意第一个点后面有空格)
额外说明
- 如果你的CSV文件有多行,这个脚本也能处理:每行的坐标对会单独处理,序号每行重新从1开始
- 脚本会自动跳过空文件或者没有有效坐标对的文件
- 如果你的坐标值都是整数,把
[double]改成[int]也可以,不影响结果
内容的提问来源于stack exchange,提问作者Michael




