我试过下面的脚本,但它跳过[任何]
$rootDirectory = "C:\Path\To\Your\Root\Directory"
Get-ChildItem -Path $rootDirectory -File -Recurse | ForEach-Object {
$newName = $_.Name -replace '[\[\]]', ''
if ($newName -ne $_.Name) {
$newPath = Join-Path -Path $_.Directory.FullName -ChildPath $newName
Rename-Item -Path $_.FullName -NewName $newName -Force
Write-Host "Renamed $($_.FullName) to $newPath"
}
}
请帮我
1条答案
按热度按时间mu0hgdu01#
你的问题是什么并不明显,但让我推荐以下方法,这可能会解决你的问题:
-WhatIf
公共参数来 * 预览 * 操作(如下所示)。-Verbose
参数使Rename-Item
将重命名项的完整路径打印到详细output stream。注意事项:
-replace '[][]'
是-replace '[\[\]]', ''
操作的简化版本;它有效地从输入文件名中删除了[
和]
的任何示例,例如,foo[bar].txt
变成了foobar.txt
。-File
限制重命名 * 文件 *:-replace
操作没有效果,即如果输入文件名不包含[
或]
,则重命名操作是良性的无操作,因此可以安全使用上述操作。-File
并且子目录存在,或者如果您仅使用-Directory
处理目录),从PowerShell(Core)7.3.8开始: