1

次の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.docfoo.doc

$opendoc.saveas([ref]"$docpath\$doc.BaseName.doc", [ref]$saveFormat);収量foo.htm.BaseName.doc

Save As...の連結に等しいファイル名変数を設定するにはどうすればよいですか?BaseName.doc

4

4 に答える 4

0

上記のコメントに基づくと、ファイルを移動することだけが目的のようです。以下は私にとってはうまくいきます。現在のディレクトリで、.txt 拡張子を .py 拡張子に置き換えます。ここでコマンドを見つけました。

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

ファイルの場所からこの行を実行する必要がないように変更することもでき*.txtます。C:\path\to\file\*.txt同様の方法で目的地を定義できるはずなので、それを行う簡単な方法を見つけたらまた報告します。

また、検索していると、Microsoft の TechNet Library を見つけました。PowerShell を使用したスクリプト作成に関する多くのチュートリアルがあります。ファイルとフォルダー、パート 3: Windows PowerShellは、ファイルのコピーと移動に関する追加情報を見つけるのに役立ちます。

于 2012-11-17T02:17:34.070 に答える
0

これは古い投稿であることは知っていますが、このコードをここに投稿して、将来見つけられるようにします

**

これは、ルート フォルダーの再帰的なウォークを実行し、Doc および DocX を Txt に変換します。

**

これは、保存できるさまざまな形式へのリンクです。

$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();
于 2016-04-03T14:18:09.700 に答える