【发布时间】:2013-05-14 06:31:27
【问题描述】:
如何通过一些批处理文件执行删除某些字符或将某些字符替换为其他字符,对于Windows文件夹中所有文件的文件名,是否有DOS命令?
【问题讨论】:
标签: windows file powershell batch-file cmd
如何通过一些批处理文件执行删除某些字符或将某些字符替换为其他字符,对于Windows文件夹中所有文件的文件名,是否有DOS命令?
【问题讨论】:
标签: windows file powershell batch-file cmd
使用 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 " ","_" }
【讨论】:
Where-Object 的用法是什么。 aphoe answer 在没有 Where-Object 的情况下做同样的事情
Where-Object 用法上添加了一些更好的示例。
Windows PowerShell 中用于删除或重命名某些字符的单行命令如下所示。 (这里的空格被替换为下划线)
Dir | Rename-Item –NewName { $_.name –replace " ","_" }
【讨论】:
-creplace 进行区分大小写的搜索。
PowerShell 的答案很好,但是 Rename-Item 命令在同一个目标目录中不起作用,除非您的所有文件中都包含不需要的字符(如果发现重复则失败)。
如果你像我一样,有好名字和坏名字,试试这个脚本(将用下划线替换空格):
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace(" ", "_") }
【讨论】:
-Recurse 标志和 Move-Itemcommand 有更多解释。
这个批处理文件可以提供帮助,但它有一些限制。文件名字符 = 和 % 不能被替换(从这里的内存中),文件名中的 ^ 也可能是一个问题。
在这部分%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 /? 以获得更多帮助。
【讨论】: