我正在尝试获取扩展名为“.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()
}
}
}
}
}
}
}
答案 0 :(得分:0)
我猜通过在每个子文件夹中调用一个word-process来创建大量的word-instances,从而失去了性能。您应该始终只使用一个单词实例。只需将行$Word=New-Object -ComObject WORD.APPLICATION
移至功能顶部,将行$word.quit()
移至最后。