我该如何通过批处理执行来删除某些字符或将某些字符替换为其他字符,以一次性更改 Windows 文件夹中所有文件的文件名?有DOS命令可以完成这个任务吗?
我该如何通过批处理执行来删除某些字符或将某些字符替换为其他字符,以一次性更改 Windows 文件夹中所有文件的文件名?有DOS命令可以完成这个任务吗?
_
下划线。Dir |
Rename-Item -NewName { $_.Name -replace " ","_" }
编辑:
可选地,Where-Object
命令可以用于筛选掉不符合后续cmdlet(命令)的对象。以下是一些示例,以说明它可以为您提供的灵活性:
To skip any document files
Dir |
Where-Object { $_.Name -notmatch "\.(doc|xls|ppt)x?$" } |
Rename-Item -NewName { $_.Name -replace " ","_" }
To process only directories (pre-3.0 version)
Dir |
Where-Object { $_.Mode -match "^d" } |
Rename-Item -NewName { $_.Name -replace " ","_" }
PowerShell v3.0 introduced new Dir
flags. You can also use Dir -Directory
there.
To skip any files already containing an underscore (or some other character)
Dir |
Where-Object { -not $_.Name.Contains("_") } |
Rename-Item -NewName { $_.Name -replace " ","_" }
Dir | Rename-Item –NewName { $_.name –replace " ","_" }
-creplace
进行大小写敏感的搜索。 - LosManosPowerShell的答案很好,但是Rename-Item命令在相同目标目录中不起作用,除非您所有文件中都有不想要的字符(如果找到重复项则失败)。
如果您像我一样有好的和坏的文件名混在一起,请尝试使用此脚本代替(将空格替换为下划线):
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace(" ", "_") }
%newname: =_%
的部分中,它会将冒号后面的字符用等号后面的字符替换,因此当前一堆字符将被替换为下划线。echo
以激活 ren 命令,否则它只会将命令打印到控制台窗口,直到您执行该操作为止。/s
,然后它将处理当前文件夹下的所有文件夹。%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%
dir /a:-d
仅列出文件,如果要处理所有文件和目录,则应为 dir /a
,如果要仅处理目录,则为 dir /a:d
同时缺少结尾的引号,这不会影响代码,但会影响我的目录。例如,如果您想删除目录名称中的点,则应为:
set "newname=%newname:.=%" - DefToneRrename
命令来完成此操作。在命令行中键入ren /?
以获取更多帮助。
Where-Object
用法的示例。 - Ravi K ThapliyalWhere-Object
用于根据某些条件过滤 dir 的内容。 - Tropilio