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

时间:2013-05-19 16:43:27

标签: windows file powershell batch-file cmd

如何删除某些字符或通过某些批处理文件执行将某些字符替换为其他字符,对于Windows文件夹中的所有文件的文件名一次性,是否有DOS命令?

5 个答案:

答案 0 :(得分:83)

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

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

编辑:
(可选) Where-Object命令可用于过滤输出连续 cmdlet (命令 - 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 " ","_" }
    

答案 1 :(得分:30)

Windows PowerShell中用于删除或重命名某些字符的单行命令如下所示。 (这里用空心替换空白)

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

答案 2 :(得分:10)

PowerShell答案很好,但Rename-Item命令在同一目标目录中不起作用,除非你的所有文件中都包含不需要的字符(如果找到重复的话则失败)。

如果您喜欢我并且有好名字和坏名字,请尝试使用此脚本(将使用下划线替换空格):

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

答案 3 :(得分:8)

此批处理文件可以提供帮助,但它有一些限制。文件名字符=和%无法替换(从此处的内存中取出),文件名中的^也可能是个问题。

在下一个区块中每一行的这一部分%newname: =_%中,它将:后面的字符替换为=之后的字符,这样就可以替换一堆字符用下划线。

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

它只会处理当前文件夹,除非你将/s添加到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%

答案 4 :(得分:-2)

我建议使用rename命令。在命令行键入ren /?以获得更多帮助。