如何通过某些批处理文件执行删除某些字符或将某些字符替换为其他字符,对于 Windows 文件夹中所有文件的文件名,是否有用于此的 DOS 命令?
5 回答
使用 PowerShell 为 DOS 提示符执行任何更智能的操作。在这里,我展示了如何通过用_
下划线替换当前目录中包含空格的所有文件和目录来批量重命名它们。
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 " ","_" }
PowerShell 的答案很好,但是 Rename-Item 命令在同一个目标目录中不起作用,除非您的所有文件中都包含不需要的字符(如果发现重复则失败)。
如果你像我一样,有好名字和坏名字,试试这个脚本(将用下划线替换空格):
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace(" ", "_") }
这个批处理文件可以提供帮助,但它有一些限制。文件名字符 = 和 % 不能被替换(从这里的内存中)并且文件名中的 ^ 也可能是一个问题。
%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%
我会推荐这个rename
命令。在命令行键入ren /?
以获得更多帮助。