Board logo

标题: [文件操作] 如何批量获取文件属性 [打印本页]

作者: chnwdz    时间: 2021-11-10 15:50     标题: 如何批量获取文件属性

本帖最后由 chnwdz 于 2021-11-18 12:00 编辑

如何实现获取指定文件夹及其下属所有文件夹文件的属性
作者: idwma    时间: 2021-11-10 16:07

可以调用shell.application来获取
作者: chnwdz    时间: 2021-11-10 17:59

回复 2# idwma


    小白一个,麻烦给个详细代码
作者: idwma    时间: 2021-11-10 20:26

回复 3# chnwdz
  1. #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
  2. $a=New-Object -ComObject Shell.Application
  3. dir -r|?{$_.attributes -notlike "*directory*"}|%{
  4. $b=$a.namespace($_.directoryname)
  5. foreach($i in 0..300){$c+=$b.getdetailsof($b.parsename($_.name),$i)+" "}
  6. $c;$c=$null
  7. }
复制代码

作者: went    时间: 2021-11-10 21:36

本帖最后由 went 于 2021-11-10 21:38 编辑

test.bat ANSI编码
  1. #&@cls&cd /d "%~dp0"&powershell -c "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" &pause&exit
  2. cls
  3. #指定文件夹
  4. $dir = 'F:\Desktop\新建文件夹'
  5. $shell = New-Object -ComObject 'Shell.Application'
  6. $folder = $shell.NameSpace($dir)
  7. $info = ''
  8. $folder.Items() | foreach {
  9.     Write-Host $_.Path
  10.     $info += &{
  11.         $_.Path + "`r`n"
  12.         $i = 30    #最大属性索引
  13.         &{
  14.             while($i -gt 0){
  15.                 $folder.GetDetailsOf(0,$i) + ': ' + $folder.GetDetailsOf($_,$i) + "`r`n"
  16.                 --$i
  17.             }
  18.         } | Where-Object { $_ -match '^.*?\S+.*?:.*?\S+.*?$'}
  19.         "----------------------`r`n"
  20.     }
  21. }
  22. $info | Out-File 'info.txt'
复制代码

作者: chnwdz    时间: 2021-11-11 14:22

本帖最后由 chnwdz 于 2021-11-18 11:59 编辑

回复 4# idwma
作者: idwma    时间: 2021-11-11 16:55

回复 6# chnwdz


    什么是字数和字符数?是一样的吗?
作者: chnwdz    时间: 2021-11-11 17:03

本帖最后由 chnwdz 于 2021-11-16 10:09 编辑

回复 7# idwma


那就只要字符数,就行
感谢!
作者: idwma    时间: 2021-11-11 19:00

  1. #@&cls&powershell "type '%~0'|out-string|iex">aaa.csv&pause&exit
  2. $a=New-Object -ComObject Shell.Application
  3. $p="177","0","1","2","3","4","5","27","20","13","281","194","198","195"
  4. dir -r|?{$_.attributes -notlike "*directory*"}|%{
  5. $b=$a.namespace($_.directoryname)
  6. foreach($i in $p){$c+=$b.getdetailsof($b.parsename($_.name),$i)+","}
  7. $c;$c=$null
  8. }
复制代码

作者: chnwdz    时间: 2021-11-13 07:50

回复 5# went


    你好,这个只能做出来一级文件夹,子文件夹以下的文件夹及文件均不能出来。
作者: chnwdz    时间: 2021-11-13 07:59

本帖最后由 chnwdz 于 2021-11-13 08:39 编辑

回复 9# idwma
效果棒极了。美中不足的可能是我处理出来的数据量太大(有十多万行),出来的表格部分有串列情况(不串行);个别文件夹或可能名称格式比较特殊(带字符,如:,),导致文件路径或文件名被强制分开占用两个单元格,且字符丢失,不能完全显示。可能数据量大,存在部分音视频无法获取时长,部分文件无法获取大小,个别文件未获取路径。
作者: chnwdz    时间: 2021-11-13 08:02

本帖最后由 chnwdz 于 2021-11-13 08:04 编辑

非常感谢各位




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2