如何在PowerShell中将Excel转换的CSV文件保存到指定路径
解决方案
要把CSV文件导出到指定的目标文件夹,核心是重新构造CSV文件的输出路径,而不是直接替换原文件的后缀。以下是两种常用的实现方式:
方式一:所有CSV统一放到目标根目录
如果不需要保留原Excel文件的目录结构,直接把所有CSV集中到一个目标文件夹:
# 指定CSV要导出的目标文件夹 $TargetFolder = "C:\Users\j.doe\Desktop\Test Stage EDIT\Target" # 提前检查目标文件夹是否存在,不存在则自动创建 if (-not (Test-Path -Path $TargetFolder)) { New-Item -Path $TargetFolder -ItemType Directory | Out-Null } $Files = Get-ChildItem -Path "C:\Users\j.doe\Desktop\Test Stage EDIT\Source" -Include *.xlsx -Recurse ForEach ($File in $Files) { # 拼接目标CSV的完整路径:目标文件夹 + 替换后缀后的文件名 $CsvOutputPath = Join-Path -Path $TargetFolder -ChildPath ($File.Name -replace '\.xlsx$', '.csv') # 执行转换并导出到目标路径 Import-Excel -Path $File.FullName | Export-Csv -Path $CsvOutputPath -NoTypeInformation }
关键说明
- 使用
Join-Path拼接路径是PowerShell中处理路径的标准方式,能自动处理路径分隔符(比如\)的问题,避免手动拼接字符串出错。 - 提前创建目标文件夹,防止因文件夹不存在导致导出失败。
方式二:保留原文件的目录结构
如果原Excel文件分布在Source的子文件夹中,希望CSV文件也在Target下保持相同的目录层级:
$SourceFolder = "C:\Users\j.doe\Desktop\Test Stage EDIT\Source" $TargetFolder = "C:\Users\j.doe\Desktop\Test Stage EDIT\Target" $Files = Get-ChildItem -Path $SourceFolder -Include *.xlsx -Recurse ForEach ($File in $Files) { # 计算当前Excel文件相对于源文件夹的路径 $RelativePath = $File.FullName.Substring($SourceFolder.Length) # 将相对路径替换为目标文件夹下的路径,并修改文件后缀为.csv $CsvOutputPath = Join-Path -Path $TargetFolder -ChildPath ($RelativePath -replace '\.xlsx$', '.csv') # 确保CSV文件所在的子文件夹存在 $CsvParentDir = Split-Path -Path $CsvOutputPath -Parent if (-not (Test-Path -Path $CsvParentDir)) { New-Item -Path $CsvParentDir -ItemType Directory | Out-Null } Import-Excel -Path $File.FullName | Export-Csv -Path $CsvOutputPath -NoTypeInformation }
关键说明
- 通过截取
FullName中源文件夹长度之后的部分,得到文件的相对路径,再映射到目标文件夹下。 - 用
Split-Path获取CSV文件的父目录,提前创建该目录,保证子文件夹结构和源目录一致。
内容的提问来源于stack exchange,提问作者George Vasiliades
相关产品推荐
相关产品推荐

