Таким образом, для переименования мы можем использовать следующее для обновления файлов в вашем $New_Reports
пути.
Get-ChildItem $New_Reports -Filter *.docx | Rename-Item -NewName {"{0} {1}{2}" -f ($_.basename, $date, $_.extension)}
Что касается другой проблемы ... Когда я проверял ваш скрипт, я вижув том, что файл закрывается, а в Word нет.Это видно по тому факту, что после вызова SaveAsWordDoc
для файла его можно вручную открыть и редактировать в Word.
Чтобы исправить это, вам потребуется quit()
из Word.Это может занять несколько секунд, но вы увидите, что он выпадет из ваших запущенных процессов.
Чтобы выполнить это и все еще использовать ваши функции, я обновил OpenWordDoc
и SaveAsWordDoc
, чтобы сохранить переменную $word
вы уже создали.
Так что теперь OpenWordDoc
также возвращает $word
...
Function OpenWordDoc($Filename)
{
$word=NEW-Object –comobject Word.Application
Return $word, $word.documents.open($Filename)
}
А затем функция SaveAsWordDoc
принимает $word
и выдает quit()
когда мы закончим ...
Function SaveAsWordDoc ($word, $Document,$FileName)
{
$Document.Saveas($FileName)
$Document.Close()
$word.quit()
}
Теперь, когда мы вызываем OpenWordDoc
для каждого элемента, мы назначаем $word
и $Doc
$word, $Doc = OpenWordDoc -Filename $current_template_name
И когда мы сохраняемМы также включаем $word
SaveAsWordDoc -word $word -Document $Doc -FileName $current_template_name
... Кроме этого, у вас есть несколько разделов, которые можно упростить
Копирование файлов можно сократить до одной строки:
###Copies all documents in folder to New_Reports folder#####
Get-ChildItem $Templates -Filter *.docx | Copy-Item -Destination $New_Reports
И внешний цикл for
для открытия каждого файла является избыточным, и этот раздел можно сократить до чего-то вроде:
###Opens each file in New_Reports folder and modifies content#####
Get-ChildItem $New_Reports -Filter *.docx |
Foreach-Object {
$current_template_name = $_.FullName
$word, $Doc = OpenWordDoc -Filename $current_template_name
SearchAWord –Document $Doc -findText '*Date*' -replaceWithText $Date
SaveAsWordDoc -word $word -Document $Doc -FileName $current_template_name
}