PowerShell递归重命名专辑目录cover*.jpg为folder.jpg报错求助
问题修复:递归重命名cover*.jpg为folder.jpg
原代码的错误分析
第一段代码:
- 语法不完整,缺少闭合的
},导致PowerShell无法解析整个命令块 - 虽直接用
$_作为Rename-Item的路径参数多数情况能工作,但使用$_.FullName指定完整路径更稳妥
- 语法不完整,缺少闭合的
第二段代码:
Where-Object语法错误,不能在条件判断块后直接跟执行命令的块,必须通过管道将过滤后的对象传递给ForEach-Object执行重命名- 匹配规则
"Cover.jpg"太严格,不符合你要匹配cover*.jpg的需求
正确的PowerShell命令
写法一:使用Get-ChildItem过滤参数(更高效)
Get-ChildItem -Path "O:\FILES_IN_PROCESS\!!FINISHED!!\_MUSIC" -Filter "*cover*.jpg" -Recurse | ForEach-Object { Rename-Item -Path $_.FullName -NewName "folder.jpg" -Force }
写法二:使用Where-Object过滤
Get-ChildItem -Path "O:\FILES_IN_PROCESS\!!FINISHED!!\_MUSIC" -Recurse | Where-Object { $_.Name -ilike "*cover*.jpg" } | ForEach-Object { Rename-Item -Path $_.FullName -NewName "folder.jpg" -Force }
参数说明
-Filter "*cover*.jpg":在文件系统层面直接过滤文件名,比后续用Where-Object过滤效率更高-ilike "*cover*.jpg":不区分大小写匹配所有包含cover的jpg文件,适配Windows文件系统的大小写不敏感特性-Force:如果目标文件夹已存在folder.jpg,强制覆盖该文件;不需要覆盖可移除该参数$_.FullName:确保重命名操作针对文件的完整路径,避免因当前工作目录导致的路径歧义
内容的提问来源于stack exchange,提问作者mcbien
相关产品推荐
相关产品推荐

