我如何可以使用PowerShell来'另存为...'文件扩展名不同?(How can

2019-07-03 20:43发布

我使用下面的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

Answer 1:

基于以上我们的看法,似乎移动的文件是所有要完成的任务。 以下为我工作。 在当前目录中,它取代的.py扩展名为.txt扩展。 我发现这个命令在这里 。

PS C:\testing dir *.txt | Move-Item -Destination {[IO.Path]::ChangeExtension( $_.Name, "py")}

您还可以更改*.txtC:\path\to\file\*.txt ,所以你不需要从文件的位置执行这条线。 您应该能够以类似的方式来定义一个目标,所以我会报到,如果我找到一个简单的方法来做到这一点。

另外,我发现微软的TechNet库,而我正在寻找。 它有脚本很多教程使用PowerShell。 文件和文件夹,第3部分:Windows PowerShell中应该帮助你找到关于复制和移动文件的其他信息。



Answer 2:

我有从刚转换的文件名问题.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你需要在指定的格式wdFormatXMLDocumentwdFormatDocument



Answer 3:

这确实根文件夹的递归散步,写作,为.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();


Answer 4:

我知道这是一个老的文章,但我在这里张贴此代码,这样我可以在将来找到它

**

这确实根文件夹的递归的步行路程,转换文件和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();


文章来源: How can I use PowerShell to `save as…` a different file extension?