gpt4 book ai didi

powershell - 如何使用 PowerShell 替换文件夹(和子文件夹)中所有文件名的多个字符(<3)

转载 作者:行者123 更新时间:2023-12-02 23:07:46 25 4
gpt4 key购买 nike

我正在尝试使用 PowerShell 设置一个条件,如果文件名包含以下任何符号(#%&. +. {, }, ~),然后将这些符号替换为“_”。我想将此应用于所有文件和文件夹名称(包括子文件夹中的文件)。

我有以下代码,部分有效,因为它仅适用于替换 2 个符号“(%, &)”。如果我想替换更多符号,那是行不通的。弹出一条错误消息,最后只有第一个符号被替换。有没有办法修复此代码?

Get-ChildItem -Recurse | `
Where-Object {$_.Name -match '&' -or $_.Name -match '%' } | `
Rename-Item -NewName { $_.Name -replace '&','_' -replace '%','_' }

由于我没有编码经验,如果您能提供解决此问题的完整代码,我将不胜感激,谢谢!

最佳答案

使用正则表达式 character class/set ([...]) 匹配所有感兴趣的字符:

Get-ChildItem -Recurse | Rename-Item -NewName { $_.Name -replace '[#%&+{}~]', '_' }

请注意,我已经删除了 Where-Object 调用,因为没有必要预先过滤文件:
-replace 返回如果正则表达式不匹配,则返回原始字符串;如果 -NewName 参数与现有文件名相同,则 Rename-Item 是有效的空操作。

另外,如果你以 | 结束一行,你也不需要 ` 来表示行继续。

关于powershell - 如何使用 PowerShell 替换文件夹(和子文件夹)中所有文件名的多个字符(<3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56517521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com