Powershell递归重命名特殊目录

Powershell renaming special directories recursively

我得到了这个文件夹结构

C:\Users\myUser\Desktop 包括名为

的文件夹

等等... 大多数 BL 文件夹存储 file.xml,但不是全部。

因此在桌面上有很多以 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”个参数调用 "Substring" 异常:"Index and length must refer to a location within the string. Parameter name: length"

有人可以帮忙吗?

您看到的错误是因为 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-*"