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