如何用PowerShell将CSV文件内多条base64内容批量转成图片
问题原因分析
你的代码核心问题是没有正确逐行读取CSV的每条记录,而是直接操作了整个CSV对象的属性集合:
- 导入CSV后
$csv是包含所有行的数组,直接调用$csv.filename会返回所有行的文件名组成的数组,拼接成路径就会出现所有文件名堆在一起的问题 - 你遍历的是
$csv.documentbody, $csv.filename两个独立的数组,没有把单条base64和对应文件名绑定,自然无法逐行匹配处理
修复后的代码
# 导入CSV,指定分隔符为~ $csv = Import-Csv C:\Users\Desktop\Pictures.csv -Delimiter "~" # 直接遍历CSV的每一行记录 $csv | ForEach-Object { # $_代表当前循环的单条行记录 $picname = $_.filename $b64 = $_.documentbody $filename = "C:\Users\Desktop\$picname" $bytes = [Convert]::FromBase64String($b64) [IO.File]::WriteAllBytes($filename, $bytes) }
可选优化(增加错误兼容)
如果需要避免个别base64格式错误或字段缺失导致整个脚本终止,可以增加异常捕获逻辑:
$csv = Import-Csv C:\Users\Desktop\Pictures.csv -Delimiter "~" $csv | ForEach-Object { try { $picname = $_.filename $b64 = $_.documentbody $filename = "C:\Users\Desktop\$picname" $bytes = [Convert]::FromBase64String($b64) [IO.File]::WriteAllBytes($filename, $bytes) Write-Host "生成成功:$filename" } catch { Write-Host "处理失败,对应文件名:$picname,错误信息:$_" } }
内容的提问来源于stack exchange,提问作者Kristiana Dragneva
相关产品推荐
相关产品推荐

