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

[数值计算] 批处理文件中的变量延迟与全局变量怎样避免超出限制?

以下有For 循环嵌套.. 内层循环目的获取指定路径下指定格式文件大小. , 外层循环遍历各个用户文件夹,  代码最后一句 需要统计出 所有用户目录下, 该格式文件的总的大小..

这里需要使用变量延迟才能是的内部循环的文件大小能进行计算.
当外层循环很多次以后, 会超出变量延迟的限制.. 所以不得不加 endlocal

请问, 在这样矛盾的情况下, 如何得出所有用户下指定格式文件的总的大小?
  1. @echo off
  2.     set RootFolder=C:\Users
  3.     set SubFolder=AppData\Local\Microsoft\Outlook
  4.     for /f "delims=" %%i in ('dir /ad /b C:\users') do (
  5.     setlocal enabledelayedexpansion
  6.     set n=&set ds=0
  7.     if exist "%RootFolder%\%%i\%SubFolder%\*.ost" (              
  8.         for /f "delims=" %%j in ('dir /b/s %RootFolder%\%%i\%SubFolder%\*.ost') do (set /a n=!n!+1
  9.         echo %%j %%~zj
  10.         set /a ds=!ds!+%%~zj
  11.         )
  12.         
  13.         echo.
  14.         SET /a ds=!ds:~0,-3!/1024
  15.         echo Find !n! Files,Total !ds! MB
  16.         echo.
  17.     )
  18.     endlocal
  19. )
  20. echo Summary: Total Find !n! Files,Total !ds! MB
复制代码
当前运行结果:

C:\Users\admin\AppData\Local\Microsoft\Outlook\asdfa.ost 0

Missing operand.
Find 1 Files,Total 0 MB

C:\Users\Administrator\AppData\Local\Microsoft\Outlook\Default O
utlook Profile.ost 251175936
C:\Users\Administrator\AppData\Local\Microsoft\Outlook\sadf.ost 808

Find 2 Files,Total 245 MB

Summary: Total Find !n! Files,Total !ds! MB

不管是否开启变量延迟,
set /a ds=!ds!+%%~zj
表示
set /a ds=!ds ! + %%~zj
显然后面那个一元运算符! Missing operand(缺少操作数)。
直接
set /a ds=ds+%%~zj
或者set /a ds+=+%%~zj

最后那个错误不用说了,自己想。

TOP

返回列表