Почему PowerShell не сохраняется в рабочую папку? - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть сценарий PowerShell, который преобразует файлы .xls в папке в файлы .csv.У меня есть восемь файлов .xls (хотя их количество не имеет значения), которые нужно преобразовать в .csv, и они находятся в C: \ Users \ Имя пользователя \ Documents \ ABC \ RawData \ CSV \ WorkingFolder .Сценарий работает нормально, если преобразуется .xls в .csv, но проблема в том, что файлы .csv [после создания] сохраняются в C: \ Users \ UserName \ Documents , чтонеправильное место!Я хотел бы, чтобы файлы .csv были сохранены в той же папке, где находятся исходные файлы .xls: C: \ Users \ Имя пользователя \ 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 голосов
/ 13 декабря 2018

$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, который должен сохранить файл в ожидаемую папку.

0 голосов
/ 13 декабря 2018

вы можете получить текущее местоположение и указать его как путь

$localPath=(Get-Location).toString()
$wb.SaveAs($localPath + "\" + $file.Name + ".csv", 6) # 6 -> csv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...