需要Powershell脚本从目录和子目录中的* .msg文件中删除所有空格

时间:2018-11-08 19:01:59

标签: powershell

我有一堆用户,他们只是将电子邮件从Outlook拖到网络共享上。该网络SMB共享与OneDrive同步,并且一个驱动器讨厌文件名中有前导空格。另外,某些文件名太大,以至于Windows拒绝让我对其进行任何处理(超过255个字符)。我发现仅重命名文件并删除所有空格即可解决问题。我在许多子目录中都有成千上万个文件,并且它们每天都在增加。我想要一个可以每天在文件服务器上运行的简单脚本,该服务器扫描目录中的所有* .msg文件以及所有子目录,并删除所有空格。有人可以帮助我完成这个任务的Powershell脚本吗?

2 个答案:

答案 0 :(得分:1)

your own answer的以下变体应表现得更好:

Get-ChildItem -Recurse -Filter *.msg |
  Rename-Item -NewName { $_.Name.Replace(' ', '') }

注意:您可以将-File添加到Get-ChildItem,以限制与文件的匹配,以提高鲁棒性,但是实际上会使命令变慢了一点(不多)。

  • -Filter在源处进行过滤,因此比使用-Path(在命令中暗示)或-Include更快,后者需要PowerShell本身检查 all 项目。

  • 使用delay-bind script block作为-NewName自变量比调用ForEach-Object cmdlet的效果要好,在该cmdlet中,脚本块Rename-Item被称为迭代

注意:

  • 存在名称冲突的风险。

  • 尝试将文件重命名为自身(如果名称不包含空格)会被悄悄忽略。

答案 1 :(得分:0)

此脚本效果很好:

get-childitem -recurse * .msg | foreach {重命名项目$ _ $ _。Name.Replace(“”,“”)}