Day 7386 查找当前目录及子目录下最长的文件名

这是 Gemini 的作品,但是感觉好像还挺有用的,留个备份。

# 1. 获取当前目录的完整路径
$currentPath = $PWD.Path

# 2. 构造查询语句 (注意 Scope 的路径必须准确)
$query = "SELECT System.FileName, System.ItemPathDisplay FROM SystemIndex " +
         "WHERE Scope = 'file:$currentPath' AND System.FileExtension = '.jpg'"

# 3. 创建 COM 对象连接索引库
$adapter = New-Object -ComObject ADODB.Connection
$recordset = New-Object -ComObject ADODB.Recordset

try {
    $adapter.Open("Provider=Search.CollatorDSO;Extended Properties='Application=Windows';")
    $recordset.Open($query, $adapter)

    $longestName = ""
    $longestPath = ""
    $maxLength = 0

    # 4. 循环遍历结果
    while (-not $recordset.EOF) {
        $name = $recordset.Fields.Item("System.FileName").Value
        $path = $recordset.Fields.Item("System.ItemPathDisplay").Value
        
        # 统计文件名长度不含路径
        if ($name.Length -gt $maxLength) {
            $maxLength = $name.Length
            $longestName = $name
            $longestPath = $path
        }
        $recordset.MoveNext()
    }

    # 5. 输出
    if ($maxLength -gt 0) {
        Write-Host "`n==============================" -ForegroundColor Cyan
        Write-Host "检索成功!"
        Write-Host "字符长度: $maxLength"
        Write-Host "文件名称: $longestName"
        Write-Host "完整路径: $longestPath"
        Write-Host "==============================" -ForegroundColor Cyan
    } else {
        Write-Host "`n[提示] 在索引中未找到该目录下的 .jpg 文件。" -ForegroundColor Yellow
        Write-Host "原因可能是:1. 目录未加入索引;2. 索引尚未构建完成。"
    }
}
catch {
    Write-Error "发生错误: $_"
}
finally {
    # 释放资源
    if ($recordset.State -ne 0) { $recordset.Close() }
    if ($adapter.State -ne 0) { $adapter.Close() }
}

注:所有评论将在审核通过后显示,请不要在评论内容的任何位置出现链接,否则您的评论将被自动移入回收站,且永远不会被复审。

All comments will be available after being manually reviewed, please do not include any links anywhere in your comment, otherwise your comment will be automatically deleted and are not eligible for review.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注