获取目录中的文件类型数量

获取目录中的文件类型数量

如何根据按文件类型分组的目录获取文件数量?输出可能类似于

.txt: 4
.png: 16
.jpg: 32

使用脚本实现这可能并不困难,但是 Windows 的任何命令行工具中是否内置有这样的功能?

答案1

PowerShell 方式:

gci -file | group extension -NoElement |
    select @{N='Extension';E={$_.Name}}, count |
sort count -Descending

要包含子文件夹:

gci -file -recurse | group extension -NoElement |
    select @{N='Extension';E={$_.Name}}, count |
sort count -Descending

根据评论中的问题进行编辑:


按子文件夹细分:

gci -ad -s | %{
    $FolderName = $_.FullName
    $_ | gci -af | group Extension -NoElement | select Count,
         @{N='Extension';E={$_.Name}},
         @{N='Folder';E={$FolderName}} | Sort Count -Desc
} | Format-Table -Property Extension, count -GroupBy Folder

基思

答案2

具体来说,并不是这样。您可以像这样编写脚本:
dir *.jpg | find /C /I "jpg"

左边部分dir *将返回目录中的所有文件。

右侧部分find /C /I "jpg"将查找左侧部分已返回的行,进行计数(/C),并忽略大小写(/I)。

并且您可以根据需要将 *.jpg 更改为其他组件。注意:这将仅返回数字/计数结果。如果您希望它按照您的问题显示 - 您需要将所有这些放入批处理文件 (.bat) 中并添加一些额外的行以使输出更清晰。

答案3

单线:

oldIFS=$IFS; IFS=$'\n'; for file in *.*; do [ -f $file ] && echo ${file##*.}; done | awk '{fileTypes[$1]++} END{for (type in fileTypes) {print "."type": "fileTypes[type]}}' | sort -n -k2; IFS=$oldIFS

扩展了注释以提高可读性和可理解性:

# Set Input Field Separator to new-line
# This allows files with whitespace in their title.
oldIFS=$IFS
IFS=$'\n'

# Loop through files in dir
for file in *
do
    # Only if its a file.
    [ -f $file ] && \
    echo ${file##*.}
done | \
    awk '
{
    # Create list of file types
    # Increment every time a file type is encountered
    fileTypes[$1]++
}

END {
    # Loop through detected filetypes
    for (type in fileTypes) {
        # Output filetype and count.
        # Format however you want.
        print "."type": "fileTypes[type]
    }
}
' | sort -n -k2

# Restore old IFS.
IFS=$oldIFS

相关内容