使用Powershell重命名不带名称的文件(仅包含空格)

时间:2019-02-27 12:19:29

标签: powershell rename

我从应用程序中导出了一些邮件文件,并且在导出过程中将主题作为文件名。但是,源系统中有些文件没有主题,因此文件名也为空(仅包含空格)。我试图运行Powershell脚本来修复所有这些问题。但是什么也没发生:

Get-ChildItem <location> -recurse | ForEach-Object {if ($_.Name -Like " ") {Rename-Item "subject"}}

2 个答案:

答案 0 :(得分:0)

我想您正在将它们存储为txt文件。然后,使用代码:

Get-ChildItem -recurse | ForEach-Object {if ($_.BaseName -Like " ") {Rename-Item " .txt" "subject.txt"}}

如果文件具有其他扩展名,请用您的扩展名替换.txt

答案 1 :(得分:0)

Lee Daily在评论中提供了至关重要的指针:.Name输出的file-info objectsGet-ChildItem属性包括扩展名,而< strong>您必须仅测试.BaseName ,即文件名的一部分不包括扩展名。

Get-ChildItem $someDir -Recurse | Where-Object BaseName -eq ' ' |
  Rename-Item -NewName { 'subject' + $_.Extension } -WhatIf

PSv3 +语法;公用参数-WhatIf 预览重命名操作;删除它以执行实际的重命名。

  • 如果要比较的模式是文字字符串,例如-like,则使用' '运算符没有意义-因此,使用-eq

  • 请注意,将delay-bind script block-NewName一起使用,可以直接通过管道传递到Rename-Item,而无需进行中间且效率低下的ForEach-Object调用

  • 如果文件名可以由一个可变个空格(一个或多个)组成,请改用以下Where-Object调用,该调用使用-match带有regular expression的运算符:

    Where-Object BaseName -match '^ +$'