[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 如何输出目录下的文件名以及大小 到文档

如题,现在我想将文件夹内的文件名以及大小输出到文档,比如说txt,或者xls等.现在有一个代码,可以满足基本需求,但是希望可以完善一下,请各位帮忙
@echo off
(for /f "delims=" %%a in ('dir /ad /b') do (
   for /f "delims=件字 tokens=2" %%b in ('dir "%%a" /s /a ^|findstr "个文件"') do (set #s=%%b)
   call echo %%a %%#s%%
))>dest.txt
pause

这个代码输出的文件大小为字节,希望以GB为单位来显示,还有因为最后要导入到Excel中,所以希望在文件大小前加入分隔符,谢谢大家.

本帖最后由 yhcfsr 于 2018-3-30 12:17 编辑

显示GB就有点麻烦了,2G以下文件可以算术计算,2G以上只能字符串截取方法来计算了。
问一:是否都是GB级的文件?
问二:是否需要保留小数点?几位?

TOP

  1. >result.csv powershell "dir|?{$_ -is [System.IO.DirectoryInfo]}|%%{'\"'+$_.Name+'\",'+(dir $_.FullName -r|?{$_ -is [System.IO.FileInfo]}|measure length -sum|%%{($_.sum/1gb).ToString('0.00GB')})}"
复制代码
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

GB级别显示2.31GB这样的数字;MB级别显示23MB这样的数字;MB以下显示0MB
  1. @echo oFF
  2. for /f "delims=" %%a in ('dir /a-d/s/b') do (
  3. call :calc_size %%~za size
  4. setlocal enabledelayedexpansion
  5. echo;%%a !size!
  6. endlocal
  7. )
  8. pause&exit
  9. :calc_size
  10. setlocal&set "var=%1"
  11. set "var=%var:~,-6%"
  12. if not "%var%"=="" set/a "GB=%var%>>10"&set/a "MB=%var%%%(1<<10)"
  13. if "%MB%"=="" set "var=0 MB"&goto:end
  14. if "%GB%"=="0" set "var=%MB% MB"&goto:end
  15. if "%MB:~1%"=="" set "MB=0%MB%"
  16. if "%MB:~2%"=="" set "MB=0%MB%"
  17. set "var=%GB%.%MB:~,2% GB"
  18. :end
  19. endlocal&set "%2=%var%"&goto:eof
复制代码

TOP

回复 4# yhcfsr
感谢您的回复,GB小数点后面2位可以的,但是您的代码运行以后没有效果.

TOP

回复 3# zaqmlp
您的这个代码可以,但是文件的大小显示的不全,有的文件显示了尺寸,有的没有显示.麻烦帮忙看下?

TOP

回复 6# bear0328
好像和我的文件名有关系,我的文件名有些带有"[]"这样的符号,这样的文件名,不能显示出尺寸.

TOP

回复 6# bear0328

尺寸?干嘛不说体重呢
dir -Liter $_.FullName -r
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复  bear0328

尺寸?干嘛不说体重呢
dir -Liter  $_.FullName -r
zaqmlp 发表于 2018-3-30 16:41

大神,膜拜!!!!!

TOP

回复 8# zaqmlp
再想麻烦一下,提供的代码排序貌似不正常,可以按照名字顺序排序么?>

TOP

返回列表