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

PowerShell新手求助:目录遍历及文件/目录识别异常问题

问题分析与修正方案

原代码的问题

  1. 开头的#!/bin/bash是Linux Shell脚本的标识,PowerShell不需要,直接删除即可。
  2. 判断文件/目录的逻辑写在foreach循环外面,导致循环结束后只处理了最后一个遍历到的项,这就是为什么只有一个文件被标记、目录完全没处理的原因。
  3. Test-Path仅用于检查路径是否存在,无法区分文件和目录,得用PowerShell对象自带的属性来判断类型。
  4. cd c:\是多余的,Get-ChildItem已经指定了目标路径,不需要提前切换目录。

修正后的代码

Get-ChildItem -Path C:\ | ForEach-Object {
    # 通过PSIsContainer属性判断是目录还是文件
    $itemType = $_.PSIsContainer ? "Directory" : "Regular File"
    # 获取完整路径、大小(目录默认Length为0,如需实际占用大小可看下方补充)
    $fullPath = $_.FullName
    $size = $_.Length

    Write-Host "$itemType | 路径: $fullPath | 大小: $size 字节"
}

补充说明

  • 如果需要显示目录的实际占用大小(而非默认的0字节),可以替换大小部分的代码,但注意大目录会耗时较长:
    $size = if ($_.PSIsContainer) {
        (Get-ChildItem $_.FullName -Recurse -File | Measure-Object -Property Length -Sum).Sum
    } else {
        $_.Length
    }
    
  • ForEach-Object是PowerShell中管道式的遍历写法,和单独的foreach循环功能一致,但更符合PowerShell的管道风格。
  • $_.FullName确保获取的是完整路径,避免相对路径的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:31:02