我从应用程序中导出了一些邮件文件,并且在导出过程中将主题作为文件名。但是,源系统中有些文件没有主题,因此文件名也为空(仅包含空格)。我试图运行Powershell脚本来修复所有这些问题。但是什么也没发生:
Get-ChildItem <location> -recurse | ForEach-Object {if ($_.Name -Like " ") {Rename-Item "subject"}}
答案 0 :(得分:0)
我想您正在将它们存储为txt文件。然后,使用代码:
Get-ChildItem -recurse | ForEach-Object {if ($_.BaseName -Like " ") {Rename-Item " .txt" "subject.txt"}}
如果文件具有其他扩展名,请用您的扩展名替换.txt
答案 1 :(得分:0)
Lee Daily在评论中提供了至关重要的指针:.Name
输出的file-info objects的Get-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 '^ +$'