0

所以这是交易:

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

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

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

我正在运行 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”。

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

重命名项目:找不到接受参数“1506493412587000.eml”的位置参数。在 line:1 char:36 + ... 诅咒 | % { Rename-Item -Path $ .PSPath -NewName $ .FullName ( $_.Nam ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Rename-Item], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound ,Microsoft.PowerShell.Commands.RenameItemCommand

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

谢谢 :)

4

3 回答 3

1

所以看来我误导你到错误的帮助部分,我很抱歉。我应该引导你到 rename-item 的帮助下。(抱歉工作忙)。

所以会发现:

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

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

于 2017-09-27T08:28:29.480 回答
0

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

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

编辑:

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

于 2017-09-27T07:51:08.283 回答
0

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

get-childItem C:\temp\pos\mail\*.* -Recurse -File | rename-item -newname { "$($_.name).eml" }
于 2017-09-27T08:57:13.423 回答