我使用下面的PowerShell脚本打开几千HTML文件和“另存为...” Word文档。
param([string]$htmpath,[string]$docpath = $docpath)
$srcfiles = Get-ChildItem $htmPath -filter "*.htm*"
$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatDocument");
$word = new-object -comobject word.application
$word.Visible = $False
function saveas-document
{
$opendoc = $word.documents.open($doc.FullName);
$opendoc.saveas([ref]"$docpath\$doc.FullName.doc", [ref]$saveFormat);
$opendoc.close();
}
ForEach ($doc in $srcfiles)
{
Write-Host "Processing :" $doc.FullName
saveas-document
$doc = $null
}
$word.quit();
内容漂漂转换,但并不如预期我的文件名。
$opendoc.saveas([ref]"$docpath\$doc.FullName.doc", [ref]$saveFormat);
结果foo.htm
保存为foo.htm.FullName.doc
而不是foo.doc
。
$opendoc.saveas([ref]"$docpath\$doc.BaseName.doc", [ref]$saveFormat);
产量foo.htm.BaseName.doc
如何建立一个Save As...
文件名可变等于串联BaseName
和.doc
?
基于以上我们的看法,似乎移动的文件是所有要完成的任务。 以下为我工作。 在当前目录中,它取代的.py扩展名为.txt扩展。 我发现这个命令在这里 。
PS C:\testing dir *.txt | Move-Item -Destination {[IO.Path]::ChangeExtension( $_.Name, "py")}
您还可以更改*.txt
到C:\path\to\file\*.txt
,所以你不需要从文件的位置执行这条线。 您应该能够以类似的方式来定义一个目标,所以我会报到,如果我找到一个简单的方法来做到这一点。
另外,我发现微软的TechNet库,而我正在寻找。 它有脚本很多教程使用PowerShell。 文件和文件夹,第3部分:Windows PowerShell中应该帮助你找到关于复制和移动文件的其他信息。
我有从刚转换的文件名问题.html
到.docx
。 我把你的代码上面,并将其改成这样:
function Convert-HTMLtoDocx {
param([string]$htmpath)
$srcfiles = Get-ChildItem $htmPath -filter "*.htm*"
$saveFormat = [Microsoft.Office.Interop.Word.WdSaveFormat]::wdFormatXMLDocument
$word = new-object -comobject word.application
$word.Visible = $False
ForEach ($doc in $srcfiles) {
Write-Host "Processing :" $doc.fullname
$name = Join-Path -Path $doc.DirectoryName -ChildPath $($doc.BaseName + ".docx")
$opendoc = $word.documents.open($doc.FullName)
$opendoc.saveas([ref]$name.Value,[ref]$saveFormat)
$opendoc.close()
$doc = $null
} #End ForEach
$word.quit()
} #End Function
问题是保存格式。 无论出于何种原因,所以文档保存为一个.docx
你需要在指定的格式wdFormatXMLDocument
不wdFormatDocument
。
这确实根文件夹的递归散步,写作,为.htm过滤.DOC:
$docpath = "\\sf-xyz-serverabc01\ChangeTheseDocuments"
$WdTypes = Add-Type -AssemblyName 'Microsoft.Office.Interop.Word, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' -Passthru
$srcfiles = get-childitem $docpath -filter "*.doc" -rec | where {!$_.PSIsContainer} | select-object FullName
$saveFormat = $WdTypes | Where {$_.Name -eq 'WdSaveFormat'}
$word = new-object -comobject word.application
$word.Visible = $False
function saveas-filteredhtml
{
$opendoc = $word.documents.open($doc.FullName);
$Name=($doc.Fullname).replace("doc","htm")
$opendoc.saveas([ref]$Name, [ref]$saveFormat::wdFormatFilteredHTML);
$opendoc.close();
}
ForEach ($doc in $srcfiles)
{
Write-Host "Processing :" $doc.FullName
saveas-filteredhtml
$doc = $null
}
$word.quit();
我知道这是一个老的文章,但我在这里张贴此代码,这样我可以在将来找到它
**
这确实根文件夹的递归的步行路程,转换文件和DOCX到TXT
**
这里有一个LINK的diffierent格式,你可以保存到。
$docpath = "C:\Temp"
$WdTypes = Add-Type -AssemblyName 'Microsoft.Office.Interop.Word, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' -Passthru
$srcfiles = get-childitem $docpath -filter "*.doc" -rec | where {!$_.PSIsContainer} | select-object FullName
$saveFormat = $WdTypes | Where {$_.Name -eq 'WdSaveFormat'}
$word = new-object -comobject word.application
$word.Visible = $False
function saveas-filteredhtml
{
$opendoc = $word.documents.open($doc.FullName);
$Name=($doc.Fullname).replace(".docx",".txt").replace(".doc",".txt")
$opendoc.saveas([ref]$Name, [ref]$saveFormat::wdFormatDOSText); ##wdFormatDocument
$opendoc.close();
}
ForEach ($doc in $srcfiles)
{
Write-Host "Processing :" $doc.FullName
saveas-filteredhtml
$doc = $null
}
$word.quit();