powershell - 替换文件夹及其子文件夹中所有文件的文件名中的某些字符

标签 powershell cmd window filenames

如何更改一个文件夹及其子文件夹中多个文件的文件名中的某些字符(#、%、&、$)?

Ravi Thapliyal 回答了如何使用 PowerShell 执行此操作,但仅限于特定文件夹 ( Replace or delete certain characters from filenames of all files in a folder ) 中的文件。

我需要对所选文件夹中所有文件夹中的所有文件进行概括。

最佳答案

您自己的答案只会更改一个字符,这是一种一次性使用数组正则表达式的解决方案,从 $replace 中删除您想要保留的字符。

[char[]]$replace = '!@#$%^&*(){}[]":;,<>/|\+=`~ '''
$regex = ($replace | % {[regex]::Escape($_)}) -join '|'

Get-ChildItem -recurse | 
  ForEach { 
    if ($_.Name -match $RegEx){
      Ren $_.Fullname -NewName $($_.Name -replace $RegEx, '_') -whatif
    } 
  }

如果输出看起来正常,请删除 -whatif

编辑从 Get-ChildItem 中删除了 -File 选项,因为它需要最新的 Powershell 版本,但没有必要。

Edit2 我经常声明 Rename-Item 接受管道输入,因此这里有一个更直接的版本:

[char[]]$replace = '!@#$%^&*(){}[]":;,<>/|\+=`~ '''
$regex = ($replace | % {[regex]::Escape($_)}) -join '|'
Get-ChildItem -recurse |
  Where-Object { $_.Name -match $RegEx} |
    Rename-Item -NewName {$_.Name -replace $RegEx, '_'} -whatif

关于powershell - 替换文件夹及其子文件夹中所有文件的文件名中的某些字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40985612/

相关文章:

batch-file - 检查字符串是否被引用并向字符串添加引号的问题

vbscript - 复制到剪贴板时使用 vbCRLF 时出现问题

c# - 窗口服务中的代码是如何执行的?

c++ - OpenGL 离屏渲染

arrays - 编写进度条,直到Get-Job返回 “Running” PowerShell

powershell - 在部署期间使用脚本从 SCCM 检索应用程序属性

xml - 注释 XML 部分(在节点中有前缀)并取消注释其他

azure - 如何检查哪个Azure资源正在使用特定的IP地址?

windows - Typepref 命令在运行远程命令时没有给出有效的计数器

java - 如何在JAVA中设置SWING窗口的尺寸