Powershell在文件夹和子文件夹中搜索扩展名为“.rtf”的文件

时间:2016-11-03 13:20:02

标签: loops powershell scripting filesystems

我正在尝试获取扩展名为“.rtf”的目录中的所有文件。我有一个工作脚本,但它需要一段时间,因为在foreach循环中有一个foreach循环。有没有更快的方法来处理这个?该脚本的目标是获取以.rtf结尾的目录中的所有文件,并使用MSWord打开文件并将其另存为“.DOC”。转换功能正常。问题在于搜索所有文件夹的时间长度。

Function Convert-Dir($path)
{
$subFolders = get-childitem $path -Recurse | Where-Object {$_.PSIsContainer -eq $True}
if($subFolders)
{
    foreach($folder in $subFolders)
    {
        if($folder.PSisContainer)
        {
            $Files=Get-ChildItem $folder.fullname -Filter "*.rtf"
            $Word=New-Object -ComObject WORD.APPLICATION

            if($Files)
            {
                foreach ($File in $Files) 
                {
                    $Doc=$Word.Documents.Open($File.fullname)

                    $Name=($Doc.name).replace("rtf","doc")

                    if (Test-Path $Name)
                    {

                    } else 
                    {
                        # Use WORD 
                        $fullName = ($Doc.path + "\" + "Converted_" + $Name)
                        $Doc.saveas([ref] $fullName, [ref] 0)  
                        $Doc.close()
                        $fileToRemove = $File.fullName
                        Remove-Item $fileToRemove
                        $Word.Quit()
                    }
                }
            }
        }
    }
}

}

1 个答案:

答案 0 :(得分:0)

我猜通过在每个子文件夹中调用一个word-process来创建大量的word-instances,从而失去了性能。您应该始终只使用一个单词实例。只需将行$Word=New-Object -ComObject WORD.APPLICATION移至功能顶部,将行$word.quit()移至最后。