Powershell递归重命名特殊目录
Powershell renaming special directories recursively
我得到了这个文件夹结构
C:\Users\myUser\Desktop
包括名为
的文件夹
- BL-100
- BL-105
- BL-108
等等...
大多数 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-*"
我得到了这个文件夹结构
C:\Users\myUser\Desktop 包括名为
的文件夹- BL-100
- BL-105
- BL-108
等等... 大多数 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-*"