简体   繁体   中英

Why is PowerShell not saving to working folder?

I have a PowerShell script that converts .xls files in a folder to .csv files. I have eight .xls files (although the number doesn't matter) to be converted to .csv, and they are located in C:\\Users\\UserName\\Documents\\ABC\\RawData\\CSV\\WorkingFolder . The script works fine as far as converting .xls to .csv goes, but the problem is that the .csv files [after being created] are getting saved to C:\\Users\\UserName\\Documents , which is the wrong location! I would like the .csv files to be saved to the same folder where the original .xls files are located: C:\\Users\\UserName\\Documents\\ABC\\RawData\\CSV\\WorkingFolder , which is also the folder in which I am running the script. I have tried -path . to no avail. Any help would be appreciated! The script is as follows.

$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

$file.Name represents the file name, not the full path to the file

When you are calling

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

You are telling Excel to save nameofmyfile.xls.csv , and it is saving it to the default folder location which is your documents folder.

What you need to call is

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

Which will tell Excel to save C:\\Users\\UserName\\Documents\\ABC\\RawData\\CSV\\WorkingFolder\\nameofmyfile.xls.csv which should save the file to the expected folder location.

you can get current location and give it as path

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM