将 .eml 添加到多个文件夹中每个文件名的末尾

Adding .eml to the end of every filename in multiple folders

所以这是交易:

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

我的计划是执行 Thunderbird -> 导入到邮件存储 -> 导出到 pst -> 导入到 outlook(或让 outlook 打开文件)。

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

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

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

现在我看到了 中给出的答案,但这不是我想要的。 我也看到了 http://www.kevinberridge.com/2010/06/powershell-add-extension-to-every-file.html 但问题是它没有处理递归添加“.eml”。

当我尝试 运行 上述代码时,我得到

Rename-Item : A positional parameter cannot be found that accepts argument '1506493412587000.eml'. At line:1 char:36 + ... curse | % { Rename-Item -Path $.PSPath -NewName $.FullName ( $_.Nam ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Rename-Item], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.RenameItemCommand

有人可以告诉我我需要做什么才能打开“.eml”吗?

谢谢:)

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

查看示例,尤其是第 4 个示例。

编辑:

在对所有文件执行此操作之前,您是否手动执行过一个文件并检查它是否适用于 Outlook?

看来我把你误导到了错误的帮助部分,对此我深表歉意。我应该带你去重命名项目的帮助。 (工作忙)

所以 there 你会发现:

 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 更改为您的文件的扩展名。

注意到替换部分的 \$ 了吗? 那是一个正则表达式。 \ 是说,寻找一个实际的点。 $-符号是说,在字符串的末尾。

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

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