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

VS1*_*VS1 52 windows powershell cmd file batch-file

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

Rav*_*yal 87

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

Dir |
Rename-Item -NewName { $_.Name -replace " ","_" }
Run Code Online (Sandbox Code Playgroud)

编辑:
可选地,Where-Object命令可用于过滤掉连续 cmdlet(command-let)的不合格对象.以下是一些示例,说明它可以为您提供的灵活性:

  • 跳过任何文档文件

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

    Dir |
    Where-Object { $_.Mode -match "^d" } |
    Rename-Item -NewName { $_.Name -replace " ","_" }
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 跳过任何已包含下划线(或其他某个字符)的文件

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

  • 重命名项:源和目标路径必须不同.错误:/ (3认同)

aph*_*hoe 31

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

Dir | Rename-Item –NewName { $_.name –replace " ","_" }
Run Code Online (Sandbox Code Playgroud)

  • 重命名项:源和目标路径必须不同.错误:/ (3认同)
  • 使用`-creplace`进行区分大小写的搜索. (2认同)

Dus*_*one 12

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

如果你像我一样并且有好名字和坏名字,请尝试使用这个脚本(用下划线替换空格):

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


fox*_*ive 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%
Run Code Online (Sandbox Code Playgroud)