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):“索引和长度必须引用位置的字符串中的参数名称:长度“
任何人都可以帮忙吗?
答
您看到的错误是因为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-*"
'$ _命名样 'BL - *''。注意:如果子字符串无法完成操作,可能会失败;例如''1'.Substring(0,2)'。 – JohnLBevan
除了@john注释(这是答案),为了理解这个错误的原因,请考虑一下名为“AB”的文件夹(只有两个字符)会发生什么情况。现在'length'参数超出范围(字符串只有两个字符长度,你要求3个字符) –
工作得很好,谢谢@john! –