[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程批处理在线视频分享
返回列表 发帖

[数值计算] bat 子目录文件大小和

分别查询
1.根目录的文件数,文件大小和
2.子目录的文件数,文件大小和
  1. pushd %~dp0
  2. @echo off
  3. setlocal enabledelayedexpansion
  4. rem 查询根目录
  5. set /a count = 0
  6. set /a file1size = 0
  7. for /f %%i in ('dir /b /a-d') do (
  8.         set /a count=count+1
  9.         set /a file1size=file1size+%%~zi
  10. )
  11. echo 根目录
  12. echo %cd% 文件数:!count!个、文件大小和:!file1size!个字节
  13. rem 查询子目录
  14. set /a counter = 0
  15. set /a file2size = 0
  16. for /f %%i in ('dir r* /b/a') do (
  17. set "b=%%~aa"
  18. if defined b (
  19. if %b:~0,1%==d (set a=1 ) else ( set a=0) )
  20. if exist %%a (
  21. set /a counter=counter+1
  22.                         set /a file2size = file2size+%%~za
  23. )
  24. )
  25. )
  26. echo 子目录
  27. echo %cd% 文件数:!counter!个、文件大小和:!file2size!个字节
  28. popd
  29. pause
复制代码
可以帮我看下问的子目录查询的时候哪里出了错吗?
一直显示查询不到文件

不好意思,上面的代码贴错了
  1. pushd %~dp0
  2. @echo off
  3. setlocal enabledelayedexpansion
  4. rem 查询根目录
  5. set /a count = 0
  6. set /a file1size = 0
  7. for /f %%i in ('dir /b /a-d') do (
  8.         set /a count=count+1
  9.         set /a file1size=file1size+%%~zi
  10. )
  11. echo 根目录
  12. echo %cd% 文件数:!count!个、文件大小和:!file1size!个字节
  13. rem 查询子目录
  14. set /a counter = 0
  15. set /a file2size = 0
  16. for /f %%i in ('dir r* /b/a') do (
  17. if exist %%a (
  18. set /a counter=counter+1
  19.                         set /a file2size = file2size+%%~za
  20. )
  21. )
  22. )
  23. echo 子目录
  24. echo %cd% 文件数:!counter!个、文件大小和:!file2size!个字节
  25. popd
  26. pause
复制代码
这个才是正确的

TOP

本帖最后由 yhcfsr 于 2018-7-11 09:33 编辑

第21行,循环变量%%a从哪里来的,不应该是%%i??
而且你这脚本本身就有很多问题:
计算大小之和时,如果数字超过4G,计算就会出错;
第20行,dir这样用不会扫描到目录吗??
第21行,dir扫描到的循环变量肯定是存在的(除非在脚本运行期间,对目录进行了更改),我认为没什么必要加判断;
涉及路径的变量,最好是加上双引号,防止路径中有空格出错
QQ 33892006

TOP

回复 3# yhcfsr
刚开始接触批处理,是自己做练习用的,所以计算大小不会超过4G,
21行%%a不好意思,是我刚才在修改的时候忘记该回去了,确实是%%i
我原来的想法是判断是否为文件,,是的话就进入计算,被你这么一说我也怀疑了自己的想法。
那你可以给我提供一下思路吗?我被卡在这里想了好久。
不知道判断为文件夹的时候如何进入子目录进行计算。
因为是新手还不是很懂批处理

TOP

回复 3# yhcfsr


    还是说有命令可以直接跳过当前目录进入子目录?

TOP

回复 4# 是抠脚小仙女
你可加论坛的QQ群或者看我签名,加我好友,以便实时沟通.
QQ 33892006

TOP

回复 6# yhcfsr


    我不能实时沟通。。。我上班时间只能开网页,不能上qq之类的聊天软件,但是我会加你的,一会午休了就加你。

TOP

回复 3# yhcfsr


   大佬,加你QQ没反应呀。。

TOP

回复 6# yhcfsr


    我琢磨出来了!查询当前目录的所有目录,再把查询到的目录当作路径进行查询!!!

TOP

返回列表