PowerShell如何验证选中文件数组含各一个.txt与.log文件
验证选中文件是否仅包含一个.txt和一个.log
核心思路
要满足「包含且仅包含一个.txt和一个.log」的要求,需完成两步验证:
- 选中文件总数必须为2(排除多选或少选的情况)
- 两个文件的扩展名分别是.txt和.log(兼容大小写差异,比如.TXT/.LOG),且无其他类型文件
方法一:直接统计扩展名数量
# 获取选中的文件路径数组 $Files = $OpenFileDialog.FileNames # 先检查文件总数是否为2 if ($Files.Count -ne 2) { Write-Host "请选择且仅选择一个.txt和一个.log文件" return } # 提取所有文件的扩展名并转小写(兼容大小写不同的情况) $extensions = $Files | ForEach-Object { [System.IO.Path]::GetExtension($_).ToLower() } # 统计.txt和.log的出现次数 $txtCount = ($extensions -eq ".txt").Count $logCount = ($extensions -eq ".log").Count # 验证条件:两种扩展名各出现一次 if ($txtCount -eq 1 -and $logCount -eq 1) { # 验证通过,执行后续逻辑 Write-Host "文件验证通过,开始执行后续操作..." # 这里写入你的业务代码 } else { Write-Host "请确保选择一个.txt和一个.log文件,不要重复选择同类型或其他类型文件" }
方法二:用分组验证(更直观)
通过Group-Object按扩展名分组,直接检查分组结果是否符合要求:
$Files = $OpenFileDialog.FileNames if ($Files.Count -ne 2) { Write-Host "请选择且仅选择一个.txt和一个.log文件" return } # 按扩展名(小写)分组 $extGroups = $Files | Group-Object { [System.IO.Path]::GetExtension($_).ToLower() } # 检查分组:必须有2个分组,分别是.txt和.log,且每个分组只有1个文件 if ($extGroups.Count -eq 2 -and $extGroups.Name -contains ".txt" -and $extGroups.Name -contains ".log" -and ($extGroups | ForEach-Object { $_.Count -eq 1 })) { Write-Host "文件验证通过" # 执行后续逻辑 } else { Write-Host "文件不符合要求,请选择一个.txt和一个.log文件" }
注意事项
- 使用
[System.IO.Path]::GetExtension()提取扩展名比手动分割字符串更可靠,能正确处理文件名中包含多个点的情况(比如my.file.txt会正确返回.txt) - 转小写是为了兼容用户选中
.TXT或.LOG的情况
内容的提问来源于stack exchange,提问作者Fitzgery
相关产品推荐
相关产品推荐

