如何在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目录无图片文件,无操作执行" } }
原代码的不足修复
- 忽略子文件夹:添加
-File参数限制Get-ChildItem仅检索文件,避免包含子文件夹 - 日志记录:新增
Write-Log函数,统一写入带时间戳的日志到指定文件 - 覆盖第二需求:补充C:\Temp\myfolder的检查、空目录判断、图片移动逻辑
- 错误处理:添加
try/catch捕获计划任务启动、文件移动时的异常,并记录错误信息
关键逻辑说明
- 图片扩展名匹配:用数组存储目标扩展名,通过
-contains判断文件是否符合要求 - 空目录判断:通过获取文件夹内所有项的数量来判断是否为空
- 移动文件:使用
Move-Item的-Force参数覆盖目标目录同名文件 - 日志可靠性:添加
-ErrorAction SilentlyContinue避免日志写入失败中断脚本
内容的提问来源于stack exchange,提问作者Robert Gething
相关产品推荐
相关产品推荐

