PowerShell脚本优化:排除多章节文件夹执行mkdir与move操作
PowerShell脚本修改方案:区分单/多章节文件夹处理
需求明确
- 所有文件夹(含子文件夹)里的
.webp文件统一转成.jpg - 只有没有预建
Ch*类子文件夹的单章节目录,才执行:创建Ch1子目录,把目录里的所有文件移进去 - 已经有
Ch1/Ch1.5/Ch2这类子目录的多章节文件夹,跳过创建和移动操作
修正后的完整脚本
# 定义主目录路径 $rootDir = "D:\TestingGrounds\Test" # 第一步:递归把所有.webp改成.jpg Get-ChildItem -Path $rootDir -Recurse -Filter "*.webp" | Rename-Item -NewName { $_.Name -replace '\.webp$', '.jpg' } -Force # 第二步:遍历主目录下的一级子目录,判断是否需要创建Ch1 Get-ChildItem -Path $rootDir -Directory | ForEach-Object { $currentDir = $_.FullName # 检查当前目录下有没有以Ch开头的子文件夹 $hasChSubFolders = Get-ChildItem -Path $currentDir -Directory -Filter "Ch*" | Select-Object -First 1 if (-not $hasChSubFolders) { # 没有Ch开头的子文件夹,执行创建和移动 $ch1Path = Join-Path -Path $currentDir -ChildPath "Ch1" New-Item -Path $ch1Path -ItemType Directory -Force | Out-Null # 只移动当前目录下的文件,不碰子文件夹 Get-ChildItem -Path $currentDir -File | Move-Item -Destination $ch1Path -Force } }
关键修正说明
- 路径处理更靠谱:用
Join-Path拼接路径,避免手动写路径时的拼写错误;用$currentDir明确当前处理的目录,解决你之前脚本里$folder/$dir变量没正确赋值的问题 - 条件判断逻辑正确:直接检查当前目录下是否存在
Ch*开头的子文件夹,而不是误用-notcontains(这个运算符是用来判断集合里有没有某个元素的,不能用来匹配通配符) - 移动范围精准:只移动目录里的文件(加了
-File参数),不会误移子文件夹;-Force参数能处理文件重名的情况 - 转格式与目录操作分离:转格式逻辑单独处理,确保所有层级的
.webp都能被转换,不管是单章节还是多章节文件夹里的
你之前尝试的常见问题
- 变量没实际使用:比如定义了
$dirs但后续没用到,导致$folder/$dir是空的或者指向错误目录 - 运算符用错:
-notcontains不适合用来匹配通配符字符串,应该用通配符匹配或者直接检查子文件夹存在性 - 管道逻辑搞反了:把创建/移动命令放在前面,
Where-Object过滤根本没起作用,正确顺序是先过滤目录再执行操作
内容的提问来源于stack exchange,提问作者nooblett
相关产品推荐
相关产品推荐

