Board logo

标题: [文件操作] [已解决]批处理如何批量删除所有文件名中的特殊字符? [打印本页]

作者: thp2008    时间: 2022-9-24 16:39     标题: [已解决]批处理如何批量删除所有文件名中的特殊字符?

如何批量删除当前目录下的所有文件包含子目录中的文件的文件名中的特殊符号。
就是除了a-z A-Z 0-9 中文字 - .  以外的符号,全部删除掉。符号,只保留两个半角符号 - .  
其它的都不要,尤其的感叹号 !有的文件名中还有多个感叹号。
还有些是外国文字,心型,全角/半角中括号 、全角/半角小括号、各种标点符号等等。要求全部删除掉,如果删除不了,也可以替换成A或者什么的。
作者: 朱科技    时间: 2022-9-24 17:52

我来帮你总结下重点:
保留:a-z A-Z 0-9  - .
其它的全部删除,顺便我也学习下
作者: idwma    时间: 2022-9-24 19:31

本帖最后由 idwma 于 2022-9-24 19:32 编辑
  1. powershell "dir -rec|foreach{ren $_.fullname $($_.name -replace '[^0-9a-z\u4e00-\u9fff\-\.]')}"
复制代码

作者: thp2008    时间: 2022-9-25 00:13

本帖最后由 thp2008 于 2022-9-25 00:16 编辑

我直接运行了,数千文件,一下就解决了。牛,满足要求。


大神,能不能帮我改下,把空格保留下来,可以吗?谢谢!
作者: 77七    时间: 2022-9-25 10:30

我也在关注这个帖子,大神的代码太牛逼了,我昨天想把-换成_,一直不成功,今天看到你问,我百度了一下正则表达式,就发现了这个了,\s就代表空白字符,添加进去就行,你试一下看看。
  1. powershell "dir -rec|foreach{ren $_.fullname $($_.name -replace '[^0-9a-z\u4e00-\u9fff\s\-\.]')}"
复制代码
回复 4# thp2008
作者: 77七    时间: 2022-9-25 10:34

我又发现了,\w就代表字母数字及下划线,添加进去,就保留下划线“_”了。
作者: thp2008    时间: 2022-9-25 11:13

感谢!看来大家都有这种需求,弄一个,以后就方便了。一条命令全搞定了,不要为那些特殊字符的事,烦了。
作者: thp2008    时间: 2022-9-25 11:23

我试了下,运行,会报以下错误,但是好像不影响改名。规则是对的。包括子目录都一次性改好了。
  1. powershell "dir -rec|foreach{ren $_.fullname $($_.name -replace '[^0-9a-z\u4e00-\u9fff\-\.\s\w]')}"
复制代码
ren : 源路径和目标路径必须不同。
所在位置 行:1 字符: 18
+ ... rec|foreach{ren $_.fullname $($_.name -replace '[^0-9a-z\u4e00-\u9fff ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (H:\Sex2\Temp:String) [Rename-Item], IOException
    + FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand
作者: 77七    时间: 2022-9-25 12:31

回复 9# xczxczxcz


    大神,你的代码没对文件夹名做删除操作
作者: xczxczxcz    时间: 2022-9-25 13:23

回复 10# 77七


    一楼 内容只处理文件名,不处理文件夹名,所以脚本不处理文件夹名。
作者: thp2008    时间: 2022-10-18 15:28

再求助一下,
  1. powershell "dir -rec|foreach{ren $_.fullname $($_.name -replace '[^0-9a-z\u4e00-\u9fff\s\w\-\.]')}"
复制代码
1、我在使用时,发现一个问题,就是文件名中不能有半角的 “ [ ” 或“ ] ”不然会报错。

2、请帮忙把这句改一下,如果我想对文件夹名改名,删除所有特殊字符呢。
作者: WHY    时间: 2022-10-19 20:44

回复 11# thp2008
  1. @echo off
  2. set "reg=[^a-z\d\u4e00-\u9fff.-]"
  3. REM 改文件名
  4. PowerShell "dir -Literal '%~dp0' -Recurse | ?{$_ -is [IO.FileInfo] -and $_.Name -match '%reg%'} | forEach{ $newName = $_.Name -replace '%reg%'; mv -Literal $_.FullName -Dest ($_.PSParentPath + '\' + $newName) -Force }"
  5. REM 改文件夹名
  6. PowerShell "dir -Literal '%~dp0' -Recurse | ?{$_ -is [IO.DirectoryInfo] -and $_.Name -match '%reg%'} | sort FullName -Desc | forEach{ $newName = $_.Name -replace '%reg%'; mv -Literal $_.FullName -Dest ($_.PSParentPath + '\' + $newName) -Force }"
  7. pause
复制代码

作者: thp2008    时间: 2022-10-22 11:23

回复 12# WHY


    出差了几天,不方便上网,现在才来回复。非常感谢,测试通过,这次的比上次的好,完全没有报错了。好用!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2