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

[文件操作] 批处理求某个目录中的文件大小(包括所有子目录) 的几个问题?

1.自己写的代码
  1. @echo off
  2. set directory=e:\bat\
  3. set /a sumSize=0
  4. for /f %%i in ('dir /b /a-d /s %directory%') do (
  5. set /a sumSize=sumSize+%%~zi
  6. )
  7. set /a sumSize=sumSize/1024
  8. echo 目录%directory% 中占用%sumSize%KB
  9. pause
复制代码
2.论坛 那个<<变脸>> ..头像的版主
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=2* delims= " %%a in ('dir /s /ah /ar /aa /as /a /-c "E:\bat\"') do (
  3. set var=!num!
  4. set num=%%b
  5. )
  6. echo %var%
  7. pause
复制代码
问题:
1.就我们平时所说的 我看看我这目录(文件夹) 中有存了多少文件(大小)
   编写代码  是否应该是   求我们看到的有后缀的文件大小 (应该有没有后缀 也是文件的玩意)
2.求对大佬 的代码 解释下 有些不太明白
   dir /aa     等价与 /a-d 吗  为啥会有 /aa 中命令  /?中没有提及啊
   /a  和 /ad /ah /ar  是什么关系   把/a?  所有的罗列完  就能包括 目录中的所有有关文件的属性了吗  
3.  set var=!num!
    set num=%%b这是什么操作 变量没有定义之前 就能使用吗 就算他们是一行 不也要分先后吗?  难道说 我多几层变量传递 就可以得到 该变量(最后的变量)  的前几次值了
其他一些思考 请解惑?
1.我们编写的bat文件  是不是把cmd命令处理的结果  分析加以利用
2.cmd/bat 的 基本处理 单元是  行  
   for 操作是 每行执行 对每行的数据操作
3  cmd 处理的是 字符串   dir 结果可以 再次 别的 命令使用 如 管道符 |

楼主,能解释下为啥%%~zi表示文件大小呢
为卡卡西带盐

TOP

回复 2# flashercs

两个变量var和num组成一个queue ?
queue 是什么?
每次不是只能处理一行吗?  
for()中的语法 是 在获取上一行?

TOP

回复 3# flashercs

涨知识了

TOP

回复 2# flashercs
之前的多余 是什么 意思在一些高级语言 种 方法名(参数1,参数2,参数n)
结果可以根据 参数的来 展示结果
我理解的 这 dir /s /ah /ad /b
在输出结果种既要 隐藏项目 又要目录
/s /b 参数是 并列的  所以我 以为 /ah /ad  也是并列的   实际是什么呢?怎么测试下 ?

TOP

cmd跟其他console程序一样是处理的字符串,最小单位是字符,比如 a
不仅dir,所有console程序或命令都可以通过|传递给其他console程序或命令.
console程序通常有3个缓存:input buffer,output buffer, error buffer.
  1. command1|command2
复制代码
将command1的output buffer内容输出到command2的input buffer中,command2就能处理这些内容.
以此类推,可以有无数管道传递,但是最后一个管道的output buffer默认是输出到控制台,在窗口中显示出来,当然可以重定向到文件中
  1. command1|command2|command3 >file.txt
复制代码
或者用for /f读取出来,
  1. for /f %%A in ('command1^|command2^|command3') do echo %%A
复制代码
微信:flashercs
QQ:49908356

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=2* delims= " %%a in ('dir /s /a-d /-c "E:\bat\"') do (
  3. set var=!num!
  4. set num=%%b
  5. )
  6. echo %var%
  7. pause
复制代码
dir /a 参数用了多次,但仅最后一次有效果,以前的无效.多余了.
两个变量var和num组成一个queue,就是取dir 结果中的两行数据,最终结果是dir的最后两行; 你看看最后两行是什么结果,就明白了.
微信:flashercs
QQ:49908356

TOP

返回列表