我试图使用PowerShell设置一个条件,如果文件名包含以下任何符号(#
, %
, &
, +
, {, }
, ~
),则将这些符号替换为"_
"。 我想将其应用于所有文件和文件夹名称(包括子文件夹中的文件)。
我有下面的代码,部分工作正常,因为它只适用于替换2个符号"(%, &)". 如果我想要替换更多符号,它就不起作用了。会出现一个错误消息,并且只有第一个符号被替换。有没有办法修复这个代码?
Get-ChildItem -Recurse | `
Where-Object {$_.Name -match '&' -or $_.Name -match '%' } | `
Rename-Item -NewName { $_.Name -replace '&','_' -replace '%','_' }
由于我没有编码经验,如果您能提供完整的代码来解决这个问题,我会非常感激,谢谢!
get-childitem -filter '*[#%&+{}~]*'
来提高速度,但似乎-filter不接受方括号通配符。 - js2010-Filter
参数只接受?
和*
--Filter
是一个 提供程序 参数,在这种情况下是由底层的 文件系统 解释的,而不是由 PowerShell 解释的 - 只有 PowerShell 的通配符语言支持[...]
。 - mklement0