打开word文档并使用PowerShell指定编码

打开word文档并使用PowerShell指定编码,powershell,encoding,character-encoding,ms-word,Powershell,Encoding,Character Encoding,Ms Word,我试图告诉PowerShell打开一个文本文件并选择某个编码选项。默认情况下,在Word中手动打开此文本文件时,它会尝试使用日语编码打开它,因此无法正确显示某些字符 我试过很多不同的方法,但都不管用,所以我完全被卡住了 除其他外,此文本文件需要每天转换为PDF 我当前的脚本如下: $wdFormatPDF = 17 $word = New-Object -ComObject Word.Application $word.Visible = $true $folderpath = "C:\Us

我试图告诉PowerShell打开一个文本文件并选择某个编码选项。默认情况下,在Word中手动打开此文本文件时,它会尝试使用日语编码打开它,因此无法正确显示某些字符

我试过很多不同的方法,但都不管用,所以我完全被卡住了

除其他外,此文本文件需要每天转换为PDF

我当前的脚本如下:

$wdFormatPDF = 17

$word = New-Object -ComObject Word.Application
$word.Visible = $true

$folderpath = "C:\Users\smirabile\Downloads\report-testing-destination\*"
$fileTypes  = "accepted.spl"

Get-ChildItem -Path $folderpath -Include $fileTypes | ForEach-Object {
    $path = ($_.FullName).Substring(0, ($_.FullName).LastIndexOf("."))

    $doc = $word.Documents.Open($_.FullName)

    $Word.Selection.PageSetup.Orientation = 1
    $Word.Selection.PageSetup.LeftMargin  = 20
    $Word.Selection.PageSetup.RightMargin = 20
    $doc.Select()
    $Word.Selection.Font.Size = 9
    $doc.SaveAs([ref]$path, [ref]$wdFormatPDF)

    $doc.Close()
}

$word.Quit()
Stop-Process -Name WINWORD -Force
如有疑问,请阅读:

语法

expression.Open(文件名、ConfirmConversions、只读、AddToRecentFiles、,
PasswordDocument、PasswordTemplate、Revert、WritePasswordDocument、,
WritePasswordTemplate,格式,编码,可见,OpenConflictDocument,
OpenAndRepair、DocumentDirection、NoEncodingDialog)
[…]
编码|可选|变体| Microsoft Word在查看保存的文档时使用的文档编码(代码页或字符集)。可以是任何有效常量。[…]默认值是系统代码页

用于要与其默认值一起使用的参数

示例(使用iso-8859-15编码):


忘了提到我已经读过这篇文章了,但是我发现很难理解在哪里或者如何编写代码来实现这一点。到目前为止,我得到了$Word.expression.Open($Encoding:=65001),这不起作用,我尝试过的许多其他变体也不起作用。抱歉,我对powershell不是很有经验,因此非常感谢您的帮助。您不能使用命名参数。所有参数必须以正确的顺序提供,只能省略默认值的后续列表。请看一看我提供的示例。这是有原因的。对不起,因为某种原因,我直到现在才看到你的例子!虽然您的代码可以正常工作,但请您解释为什么行中有多个$def?正如我已经说过的:只有默认值的后续列表可以省略,所有其他参数(直到最后一个非默认值)必须以正确的顺序提供。
$def
参数将参数
ConfirmConversions
通过
Format
填入各自的默认值。
$def = [Type]::Missing
$doc = $word.Documents.Open(
         $_.FullName, $def, $def, $def, $def, $def, $def, $def, $def, $def, 28605
       )