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

PowerShell如何验证选中文件数组含各一个.txt与.log文件

验证选中文件是否仅包含一个.txt和一个.log

核心思路

要满足「包含且仅包含一个.txt和一个.log」的要求,需完成两步验证:

  1. 选中文件总数必须为2(排除多选或少选的情况)
  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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:15:11