将.eml添加到多个文件夹

时间:2017-09-27 07:03:58

标签: powershell outlook thunderbird maildir

所以这是交易:

我一直在使用Thunderbird - 它很棒,但我想转移到Microsoft Outlook。现在因为我把事情做得太过分了,我决定使用maildir来存储我的电子邮件。再次,它很棒,但我需要继续前进。

我的计划是做Thunderbird - >导入到mailstore - >导出到pst - >导入到outlook(或获取outlook打开文件)。

现在应该很容易,但问题是我需要一种方法将“.eml”添加到每个文件的末尾,否则mailstore将不会导入电子邮件。

我正在运行Windows 10 pro x64,这就是我在powershell中所做的事情:

Get-ChildItem -File -Recurse | % { Rename-Item -Path $_.PSPath -NewName $_.FullName ( $_.Name + ".eml" )}

现在我看到了https://stackoverflow.com/a/21611922/1129151给出的答案,但事实并非如此。 我也看到http://www.kevinberridge.com/2010/06/powershell-add-extension-to-every-file.html,但问题是它没有处理递归地添加“.eml”。

当我尝试运行上面的代码时,我得到了

  

Rename-Item:找不到接受的位置参数   参数'1506493412587000.eml'。在行:1字符:36   + ...诅咒| %{Rename-Item -Path $ .PSPath -NewName $ .FullName($ _。Nam ...   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~       + CategoryInfo:InvalidArgument:(:) [Rename-Item],ParameterBindingException       + FullyQualifiedErrorId:PositionalParameterNotFound,Microsoft.PowerShell.Commands.RenameItemCommand

有人可以告诉我我需要做些什么才能获得“.eml”?

谢谢:)

3 个答案:

答案 0 :(得分:1)

所以我似乎误导了你错误的帮助部分,因为我很抱歉。我应该引导你到rename-item的帮助。 (抱歉忙于工作)。

所以{{3}}你会发现:

 get-childItem *.txt | rename-item -newname { $_.name -replace '\.txt$','.log' }

那应该让你去,例如:

get-childItem C:\temp\pos\mail\*.* -Recurse | rename-item -newname { $_.name -replace '\.txt$','.eml' }

您应该将 txt 更改为文件扩展名。

请注意替换部分中的 \ $ ? 这是一个正则表达式。 \ \也就是说,寻找一个实际的点。 $ -sign就是说,在字符串的末尾。

答案 1 :(得分:0)

你应该看看get-childitem的帮助。

请查看示例,尤其是示例编号4。

编辑:

在对所有文件执行此操作之前,您是否已手动完成并检查它是否在Outlook中运行?

答案 2 :(得分:0)

所以所有文件都没有扩展名。 我添加了File参数,它只检索文件而不是文件夹,如果你的邮件文件夹中有任何子文件夹,请使用它。

get-childItem C:\temp\pos\mail\*.* -Recurse -File | rename-item -newname { "$($_.name).eml" }