如何递归移除文件名称中的‘ test today’内容?
批量递归移除文件名中的“ test today”字符串
针对递归处理目录及子目录中所有名称格式为* test today.cpp的文件,移除文件名里的“ test today”部分,以下是正确解决方案及对之前错误方案的说明:
正确解决方案
PowerShell 命令
Get-ChildItem -Recurse -Filter "* test today.cpp" | Rename-Item -NewName { $_.Name -replace ' test today', '' }
-Recurse参数确保遍历所有子目录-Filter精准筛选目标文件,提升处理效率- 脚本块
{ $_.Name -replace ' test today', '' }仅对文件名部分做替换,避免路径相关错误
CMD 脚本
@echo off setlocal enabledelayedexpansion for /r %%F in ("* test today.cpp") do ( set "filename=%%~nxF" set "newname=!filename: test today=!" ren "%%F" "!newname!" ) endlocal
%%~nxF提取文件的纯文件名(含后缀),避免误修改路径部分- 启用
enabledelayedexpansion确保循环内变量替换正常生效
之前方案失败原因
- PowerShell 方案:缺少
-Recurse参数未处理子目录,且Rename-Item直接使用$_.Name会导致非当前目录的文件找不到(需操作文件对象而非仅文件名) - CMD 循环方案:直接将完整路径赋值给变量并替换,可能意外修改路径中的字符串,导致重命名失败
- 直接
ren命令:CMD的ren不支持递归,且通配符替换仅适用于前缀/后缀匹配,无法处理中间字符串的移除 - FOR /R 命令:通配符写法错误(未加引号),且
ren "%x" "*.cpp"的通配符逻辑无法正确移除中间的“ test today”
内容的提问来源于stack exchange,提问作者Borisov Ignat
相关产品推荐
相关产品推荐

