如何用PowerShell将CSV所有行列转大写及实现列遍历?
批量修改CSV所有列的大小写(PowerShell实现)
现有代码说明
$in = Import-Csv .\in.csv $TextInfo = (New-Object System.Globalization.CultureInfo("en-US")).TextInfo; $in | ForEach-Object { $_.name = $textInfo.ToUpper($_.name) } $in | Export-Csv .\out.csv
上述代码可将CSV指定列转换为大写(也可替换为ToTitleCase实现首字母大写格式)。
核心疑问解答
1. 确定CSV的列数
通过Import-Csv导入的每一行数据都是自定义对象,对象的属性名对应CSV的列名。获取列名集合后,通过Count属性即可得到列数:
- 方法一:取第一行对象的属性名集合
$columnNames = $in[0].PSObject.Properties.Name $columnCount = $columnNames.Count # 得到列数 - 方法二:通过
Get-Member提取属性名$columnNames = ($in | Get-Member -MemberType Properties).Name $columnCount = $columnNames.Count # 得到列数
2. 循环遍历所有列并修改大小写
拿到列名集合后,嵌套循环遍历每一行和每一列,对单元格内容进行批量转换:
- 遍历每一行数据,在每行内循环所有列名
- 通过
$currentRow.$col的方式动态引用列,修改其值
完整实现代码
# 导入目标CSV文件 $in = Import-Csv .\in.csv # 初始化英文文本格式化对象,用于大小写转换 $textInfo = (New-Object System.Globalization.CultureInfo("en-US")).TextInfo # 获取CSV的所有列名 $columnNames = $in[0].PSObject.Properties.Name # 批量修改所有单元格内容的大小写 $in | ForEach-Object { $currentRow = $_ foreach ($col in $columnNames) { # 此处可替换为ToTitleCase实现首字母大写 $currentRow.$col = $textInfo.ToUpper($currentRow.$col) } } # 导出修改后的内容到新CSV(-NoTypeInformation避免生成多余类型行) $in | Export-Csv .\out.csv -NoTypeInformation
提示:若需要首字母大写的格式,只需将代码中的
$textInfo.ToUpper替换为$textInfo.ToTitleCase即可。
内容的提问来源于stack exchange,提问作者Nicholas Saunders
相关产品推荐
相关产品推荐

