You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
    }
}

关键修正说明

  1. 路径处理更靠谱:用Join-Path拼接路径,避免手动写路径时的拼写错误;用$currentDir明确当前处理的目录,解决你之前脚本里$folder/$dir变量没正确赋值的问题
  2. 条件判断逻辑正确:直接检查当前目录下是否存在Ch*开头的子文件夹,而不是误用-notcontains(这个运算符是用来判断集合里有没有某个元素的,不能用来匹配通配符)
  3. 移动范围精准:只移动目录里的文件(加了-File参数),不会误移子文件夹;-Force参数能处理文件重名的情况
  4. 转格式与目录操作分离:转格式逻辑单独处理,确保所有层级的.webp都能被转换,不管是单章节还是多章节文件夹里的

你之前尝试的常见问题

  • 变量没实际使用:比如定义了$dirs但后续没用到,导致$folder/$dir是空的或者指向错误目录
  • 运算符用错:-notcontains不适合用来匹配通配符字符串,应该用通配符匹配或者直接检查子文件夹存在性
  • 管道逻辑搞反了:把创建/移动命令放在前面,Where-Object过滤根本没起作用,正确顺序是先过滤目录再执行操作

内容的提问来源于stack exchange,提问作者nooblett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:45:46