replace或删除文件夹中所有文件的文件名中的某些字符

如何通过一些batch file执行删除某些字符或用其他字符replace某些字符,一次去除Windows文件夹中的所有文件的文件名,是否有DOS命令?

使用PowerShell为DOS提示符做更聪明的事情。 在这里,我展示了如何批量重命名当前目录中包含空格的所有文件和目录,方法是用_下划线replace它们。

 Dir | Rename-Item -NewName { $_.Name -replace " ","_" } 

编辑:
或者,可以使用Where-Object命令过滤出连续cmdlet (command-let)的不合格对象。 以下是一些例子来说明它可以承受的灵活性:

  • 跳过任何文档文件

     Dir | Where-Object { $_.Name -notmatch "\.(doc|xls|ppt)x?$" } | Rename-Item -NewName { $_.Name -replace " ","_" } 
  • 仅处理目录(3.0之前的版本)

     Dir | Where-Object { $_.Mode -match "^d" } | Rename-Item -NewName { $_.Name -replace " ","_" } 

    PowerShell v3.0引入了新的Dir标志。 你也可以在那里使用Dir -Directory

  • 要跳过已经包含下划线(或其他字符)的文件,

     Dir | Where-Object { -not $_.Name.Contains("_") } | Rename-Item -NewName { $_.Name -replace " ","_" } 

Windows PowerShell中用于删除或重命名特定字符的单行命令如下所示。 (这里的空白正在被下划线取代)

 Dir | Rename-Item –NewName { $_.name –replace " ","_" } 

这个batch file可以帮助,但是它有一些限制。 文件名字符=和%不能被replace(从这里的内存中去掉),文件名中的^也可能是一个问题。

在这个部分中, %newname: =_%在下面的每一行代码中,它将replace后面的字符:后面的字符代表了一堆字符将被replace为下划线。

删除echo以激活ren命令,因为它只会将命令打印到控制台窗口,直到您执行。

它只会处理当前文件夹,除非您将DIR添加到DIR命令部分,然后它将处理当前文件夹下的所有文件夹。

要删除某个字符,请从=号后面删除该字符。 在%newname:z=%一个条目将删除所有的z字符(不区分大小写)。

 @echo off for /f "delims=" %%a in ('dir /a:-d /o:n /b') do call :next "%%a" pause GOTO:EOF :next set "newname=%~nx1" set "newname=%newname: =_%" set "newname=%newname:)=_%" set "newname=%newname:(=_%" set "newname=%newname:&=_%" set "newname=%newname:^=_%" set "newname=%newname:$=_%" set "newname=%newname:#=_%" set "newname=%newname:@=_%" set "newname=%newname:!=_%" set "newname=%newname:-=_%" set "newname=%newname:+=_%" set "newname=%newname:}=_%" set "newname=%newname:{=_%" set "newname=%newname:]=_%" set "newname=%newname:[=_%" set "newname=%newname:;=_%" set "newname=%newname:'=_%" set "newname=%newname:`=_%" set "newname=%newname:,=_%" echo ren %1 "%newname% 

PowerShell的答案是好的,但是Rename-Item命令不能在同一个目标目录中工作,除非你的所有文件都有不需要的字符(如果发现重复的话会失败)。

如果你和我一样,并且混合了好名字和坏名字,那就试试这个脚本(用下划线replace空格):

 Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace(" ", "_") } 

我会build议rename为此。 typesren /? 在命令行获得更多帮助。