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

如何在PowerShell中检查文件夹及子文件夹并执行指定操作?

实现指定目录图片检查与计划任务执行的PowerShell脚本

完整脚本实现

# 定义日志文件路径
$logPath = "C:\Temp\ImageCheck.log"
# 定义需要检测的图片扩展名
$imageExtensions = @('.bmp','.jpg','.jpeg','.png','.tiff')

# 日志写入函数
function Write-Log {
    param([string]$Message)
    $logEntry = "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] $Message"
    Add-Content -Path $logPath -Value $logEntry -ErrorAction SilentlyContinue
}

# --------------------------
# 1. 检查C:\Temp根目录的图片文件
# --------------------------
$tempImages = Get-ChildItem -Path C:\Temp -File -Force | Where-Object { $imageExtensions -contains $_.Extension }

if ($tempImages.Count -gt 0) {
    Write-Log "在C:\Temp目录找到$($tempImages.Count)个图片文件,启动Notepad计划任务"
    try {
        Start-ScheduledTask -TaskName "Notepad" -ErrorAction Stop
        Write-Log "Notepad计划任务已成功启动"
    } catch {
        Write-Log "启动Notepad计划任务失败:$($_.Exception.Message)"
    }
} else {
    Write-Log "C:\Temp目录未找到图片文件"
}

# --------------------------
# 2. 检查C:\Temp\myfolder子文件夹
# --------------------------
$myFolderPath = "C:\Temp\myfolder"

if (-not (Test-Path -Path $myFolderPath)) {
    Write-Log "C:\Temp\myfolder目录不存在"
} else {
    # 获取文件夹内所有项(文件+子文件夹)
    $allFolderItems = Get-ChildItem -Path $myFolderPath -Force
    # 获取文件夹内的图片文件
    $myFolderImages = $allFolderItems | Where-Object { $_ -is [System.IO.FileInfo] -and $imageExtensions -contains $_.Extension }

    if ($allFolderItems.Count -eq 0) {
        Write-Log "C:\Temp\myfolder目录为空,无操作执行"
    } elseif ($myFolderImages.Count -gt 0) {
        Write-Log "在C:\Temp\myfolder目录找到$($myFolderImages.Count)个图片文件,开始移动到C:\Temp目录"
        try {
            $myFolderImages | Move-Item -Destination C:\Temp -Force -ErrorAction Stop
            Write-Log "所有图片文件已成功移动到C:\Temp目录"
            
            # 启动计划任务
            try {
                Start-ScheduledTask -TaskName "Notepad" -ErrorAction Stop
                Write-Log "Notepad计划任务已成功启动"
            } catch {
                Write-Log "启动Notepad计划任务失败:$($_.Exception.Message)"
            }
        } catch {
            Write-Log "移动图片文件失败:$($_.Exception.Message)"
        }
    } else {
        Write-Log "C:\Temp\myfolder目录无图片文件,无操作执行"
    }
}

原代码的不足修复

  1. 忽略子文件夹:添加-File参数限制Get-ChildItem仅检索文件,避免包含子文件夹
  2. 日志记录:新增Write-Log函数,统一写入带时间戳的日志到指定文件
  3. 覆盖第二需求:补充C:\Temp\myfolder的检查、空目录判断、图片移动逻辑
  4. 错误处理:添加try/catch捕获计划任务启动、文件移动时的异常,并记录错误信息

关键逻辑说明

  • 图片扩展名匹配:用数组存储目标扩展名,通过-contains判断文件是否符合要求
  • 空目录判断:通过获取文件夹内所有项的数量来判断是否为空
  • 移动文件:使用Move-Item的-Force参数覆盖目标目录同名文件
  • 日志可靠性:添加-ErrorAction SilentlyContinue避免日志写入失败中断脚本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:22:45