如何通过PowerShell编程实现Excel另存为CSV(MS-DOS)格式?
PowerShell批量转换CSV为MS-DOS编码格式方案
实现逻辑
调用Excel COM组件执行和手动操作完全一致的另存为逻辑,其中Excel内置的xlCSVMSDOS格式枚举值为24,处理后文件和手动保存的效果完全一致,可直接导入ETL系统。
完整脚本
# 请修改以下两个路径为你的实际路径 $sourceDir = "C:\原始CSV文件所在目录" $targetDir = "C:\处理后CSV输出目录" # 自动创建输出目录 if (-not (Test-Path $targetDir)) { New-Item -ItemType Directory -Path $targetDir | Out-Null } # 初始化Excel实例,后台运行不弹窗 $excelApp = New-Object -ComObject Excel.Application $excelApp.Visible = $false $excelApp.DisplayAlerts = $false # CSV(MS-DOS)对应的格式编号 $CSV_FORMAT = 24 # 批量处理所有csv文件 Get-ChildItem -Path $sourceDir -Filter "*.csv" | ForEach-Object { $savePath = Join-Path $targetDir $_.Name # 如需覆盖已存在的输出文件,可删除下方2行判断 if (Test-Path $savePath) { return } $wb = $excelApp.Workbooks.Open($_.FullName) $wb.SaveAs($savePath, $CSV_FORMAT) $wb.Close() } # 清理Excel进程,避免后台残留 $excelApp.Quit() [System.Runtime.InteropServices.Marshal]::ReleaseComObject($excelApp) | Out-Null Remove-Variable excelApp Write-Host "全部文件处理完毕,输出路径:$targetDir"
使用说明
- 运行前请确保设备已安装Microsoft Excel
- 将脚本开头的
$sourceDir和$targetDir替换为你实际使用的文件夹路径 - 若首次运行提示执行策略限制,可先执行命令
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser,输入Y确认后再运行脚本 - 如需直接覆盖原始文件,将
$targetDir设置为和$sourceDir相同即可
格式对比参考
- 原始文件截图:

- 处理后文件截图:

内容的提问来源于stack exchange,提问作者runatyr
相关产品推荐
相关产品推荐

