Powershell - 文件已存在时保存为功能

时间:2012-04-25 14:07:43

标签: powershell save-as

我正在尝试运行一些代码来查找所有.doc&目录中的.docx文件&子目录然后将每个目录转换为PDF格式。

下面的代码只有在这些目录中没有pdf实例时才有效,即它只能在第一次使用。以后每次都失败了:

  

使用“2”参数调用“SaveAs”的异常:“命令失败”   在C:\ convert \ convertword.ps1:12 char:13   + $ doc.saveas<<<< ($ path,$ wdFormatPDF)       + CategoryInfo:NotSpecified:(:) [],MethodInvocationException       + FullyQualifiedErrorId:ComMethodTargetInvocation

当我删除以前创建的PDF并重新运行PS时,它可以正常工作。因此,我只能假设我的SaveAs函数中缺少一个开关或参数,它以某种方式强制覆盖?

$wdFormatPDF = 17
$word = New-Object -ComObject word.application
$word.visible = $false
$folderpath = "c:\convert\*"
$fileTypes = "*.docx","*doc"
Get-ChildItem -path $folderpath -recurse -include $fileTypes |
foreach-object `
{
$path =  ($_.fullname).substring(0,($_.FullName).lastindexOf("."))
"Converting $path to pdf ..."
$doc = $word.documents.open($_.fullname)
$doc.saveas($path, $wdFormatPDF) 
$doc.close()
}
$word.Quit()

3 个答案:

答案 0 :(得分:2)

好的,我终于认为我已经找到了问题所在。这是锁定文件的 Windows资源管理器预览窗格。我打开了创建和转换文件的目录的预览窗格,这必须在pdf上创建文件锁,因此脚本无法保存新的pdf。我在Windows资源管理器中关闭了预览窗格,现在脚本重复运行!因此,Powershell Scripting没有任何问题,但感谢所有输入人员。这是我在主题http://support.microsoft.com/kb/942146

上找到的最接近的MS KB文章的链接

答案 1 :(得分:1)

试试这个:

$word.displayalerts = $false
$doc.saveas($path, $wdFormatPDF) # with Word2010 I've to use  $doc.saveas([ref]$path, [ref]$wdFormatPDF)
$word.displayalerts = $true

没有出现错误,但我使用的是Word2010,我无法使用其他版本进行测试

答案 2 :(得分:0)

根据SaveAsSaveAs2的文档,没有要覆盖的标记。所以你可以在保存之前删除它:

Remove-Item -Path $path -Force -ErrorAction SilentlyContinue
$doc.saveas ($path, $wdFormatPDF)