为什么PowerShell无法保存到工作文件夹?

时间:2018-12-12 22:45:49

标签: powershell

我有一个PowerShell脚本,可将文件夹中的.xls文件转换为.csv文件。我有八个.xls文件(尽管数量无关紧要)要转换为.csv,它们位于 C:\ Users \ UserName \ Documents \ ABC \ RawData \ CSV \ WorkingFolder 。只要将.xls转换为.csv,该脚本就可以正常工作,但是问题是[创建后] .csv文件已保存到 C:\ Users \ UserName \ Documents 是错误的位置!我希望将.csv文件保存到原始.xls文件所在的文件夹中: C:\ Users \ UserName \ Documents \ ABC \ RawData \ CSV \ WorkingFolder 我正在运行脚本的文件夹。我尝试-path .无济于事。任何帮助,将不胜感激!脚本如下。

$excel = new-object -ComObject "Excel.Application"
$excel.DisplayAlerts = $True
$excel.Visible = $False
$src_dir = $(get-location).Path # this obtains the source location, but not sure how I might
# be able to use it
foreach ($file in get-childitem *.xls) {
$wb = $excel.Workbooks.Open($file.FullName)
$wb.SaveAs($file.Name + ".csv", 6) # 6 -> csv
$wb.Close($True)
}
$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
get-childitem *.xls | foreach { remove-item -path $_.fullname }
# last line of script deletes the .xls files after they have been converted to .csv,
# more to unclutter than for anything else

2 个答案:

答案 0 :(得分:2)

$file.Name代表文件名,而不是文件的完整路径

通话时

$wb.SaveAs($file.Name + ".csv", 6) # 6 -> csv

您告诉Excel保存nameofmyfile.xls.csv,并将它保存到默认文件夹位置,即文档文件夹。

您需要打电话给

$wb.SaveAs($file.FullName + ".csv", 6) # 6 -> csv

这将告诉Excel保存C:\Users\UserName\Documents\ABC\RawData\CSV\WorkingFolder\nameofmyfile.xls.csv,这会将文件保存到预期的文件夹位置。

答案 1 :(得分:1)

您可以获取当前位置并将其作为路径

$localPath=(Get-Location).toString()
$wb.SaveAs($localPath + "\" + $file.Name + ".csv", 6) # 6 -> csv