PowerShell的重命名的特殊目录递归

问题描述:

我得到这个文件夹结构PowerShell的重命名的特殊目录递归

C:\用户\ MYUSER \桌面 包括称为文件夹

  • BL-100
  • BL-105
  • BL-108

等等...... 大多数BL文件夹存储file.xml,b并非全部。

因此,在桌面上有很多以BL开头的文件夹,而且存储file.xml最多但不是全部。

现在我想搜索的开始与BL-所有文件夹和存储file.xml和重命名这些文件夹,RG-100,RG-105,RG-108等

目前我得到这个脚本:

foreach($Directory in Get-ChildItem -Path C:\Users\myUser\Desktop -Recurse | Where-Object{($_.Name.Substring(0,3) -eq 'BL-')}){ 

} 

这不起作用,并呈现出我的错误:异常调用“串”与“2”参数(S):“索引和长度必须引用位置的字符串中的参数名称:长度“

任何人都可以帮忙吗?

+1

'$ _命名样 'BL - *''。注意:如果子字符串无法完成操作,可能会失败;例如''1'.Substring(0,2)'。 – JohnLBevan

+1

除了@john注释(这是答案),为了理解这个错误的原因,请考虑一下名为“AB”的文件夹(只有两个字符)会发生什么情况。现在'length'参数超出范围(字符串只有两个字符长度,你要求3个字符) –

+1

工作得很好,谢谢@john! –

您看到的错误是因为SubString由于某种原因失败。最可能的原因是如果字符串不够长;例如如果您有一个名称为1个字符的文件夹。要看我的意思,请尝试运行:'1'.Substring(0,2)

为了避免这种情况,您可以使用like运算符。例如

foreach($Directory in (
    Get-ChildItem -LiteralPath 'C:\Users\myUser\Desktop' -Recurse ` 
    | Where-Object{($_.Name -like 'BL-*')} 
)){ 
    #... 
} 

只要做到这一点:

Get-ChildItem "C:\Users\myuser\Desktop" -directory -Filter "BL-*"