我必须浏览多个级别的子文件夹并删除在SharePoint中无效的特殊字符,主要是“#&”
我在互联网上搜寻不同的命令; rename-item / move-item,两者的变化,都无济于事。我最接近的是使用:
Get-ChildItem -Recurse | Rename-Item -NewName {$_.Name -replace'[!@#&]','_'}
但我不断收到此错误:重命名项:源和目标路径必须不同。
有人能指出我正确的方向吗?
此致
答案 0 :(得分:2)
当您尝试将目录重命名为与当前名称相同的NewName
时,只会发生该错误,您可以放心地忽略它。
添加-ErrorAction SilentlyContinue
以静默方式禁止显示错误消息:
Get-ChildItem -Recurse | Rename-Item -NewName {$_.Name -replace'[!@#&]','_'} -ErrorAction SilentlyContinue
答案 1 :(得分:0)
您需要过滤掉您不打算重命名的文件:
Get-ChildItem -Recurse |
Where-Object { $_.Name -match '[!@#&]' } |
Rename-Item -NewName {$_.Name -replace '[!@#&]','_'}
答案 2 :(得分:0)
这样的事情可能会起作用
dir -Recurse -File | ? basename -Match '[!@#&]' | % {
# if the file.txt already exists, rename it to file-1.txt and so on
$num = 1
$base = $_.basename -replace'[!@#&]', '_'
$ext = $_.extension
$destdir = Split-Path $_.FullName
$newname = Join-Path $destdir "$base$ext"
while (Test-Path $newname) {
$newname = Join-Path $destdir "$base-$num$ext"
$num++
}
ren $_.fullname $newname
}