1,打印当前目录及子目录的磁盘占用
代码如下:
@echo offecho 正在统计占用的空间……echo ========================dir|findstr /i "file(" > 1.txtfor /f "delims=) tokens=2" %%i in (1.txt) do echo 当前磁盘占用为:%%iecho ========================dir /ad /b > 2.txtfor /f "delims=]" %%a in (2.txt) do (dir "%%a"|findstr /i "file(" >> 3.txt && for /f "delims=) tokens=2" %%k in (3.txt) do echo 子目录%%a磁盘占用为:%%k && del /q 3.txt)del /q 1.txt 2.txtecho ========================pause
上面是自己写的,感觉好麻烦,而且只能查看当前目录和下一级子目录的磁盘占用,对更深的子目录不起作用。而且,个人感觉实现好臃肿,应该有更便捷的方法。
2,打印当前目录及子目录的磁盘占用(代码1-改进)
代码如下:
@echo offecho 正在计算当前目录磁盘占用……echo ===========================for /f "tokens=3,4" %%i in ('dir ^| findstr /i 个文件') do echo 当前目录磁盘占用:%%i%%jecho ===========================for /f "delims=]" %%k in ('dir /ad /b') do (for /f "tokens=3,4" %%l in ('dir "%%k"^| findstr /i 个文件') do echo 子目录%%k磁盘占用:%%l%%m)pause
这里用到了^|命令,通过^使for /f 语句中的command可以使用管道符号。这个点比较重要。
2,打印当前目录及子目录的磁盘占用(代码1-改进2)
代码如下:
@echo offecho 正在计算当前目录磁盘占用……echo ===========================for /f "tokens=3,4" %%i in ('dir ^| findstr /i 个文件') do echo 当前目录磁盘占用:%%i%%jecho ===========================for /f "delims=" %%k in ('dir /ad /b') do (for /f "tokens=3,4" %%l in ('dir "%%k"^| findstr /i 个文件') do echo 子目录%%k磁盘占用:%%l%%m)pause
扩展练习
1,显示当前目录和所有子目录的磁盘占用
@echo offecho 正在计算当前目录磁盘占用……echo ===========================for /f "tokens=3,4" %%i in ('dir ^| findstr /i 个文件') do echo 当前目录磁盘占用:%%i%%jecho ===========================for /f "delims=]" %%k in ('dir /ad /b /s') do (for /f "tokens=3,4" %%l in ('dir "%%k"^| findstr /i 个文件') do echo 子目录%%k磁盘占用:%%l%%m)pause
对比实力2,仅仅在dir命令出多了/s开关,意思是目录下的所有子目录。
2,显示当前木和所有子目录中,磁盘占用超过100M的文件
@echo offecho 正在计算当前目录磁盘占用……echo ===========================for /f "tokens=3,4" %%i in ('dir ^| findstr /i "File( 个文件"') do echo 当前目录%~dp0 磁盘占用:%%i%%jecho ===========================for /f "delims=" %%k in ('dir /ad /b /s') do (for /f "tokens=3,4" %%l in ('dir "%%k"^| findstr /i "file 个文件"') do (set xy=%%lif "!xy:,=" gtr "1024000" echo 磁盘占用大于100M的目录有:%%k,大小为%%l%%m))pause
增加if语句做条件判断,只输出大于100M的文件夹。
3,删除当前目录和子目录的空文件夹
方法1
@echo off &setlocal enabledelayedexpansionfor /f "delims=" %%i in ('dir /s /b /ad') do (dir /b "%%~i" | findstr ".">nul || rd /s /q "%%~i")
dir /b "%%~i" | findstr "."判断目录是否有文件,如果没有文件,判定为空文件夹,执行删除rd /s /q "%%~i",主要删除要加/s,连同子目录一起删除。
方法2
@echo off &setlocal enabledelayedexpansionfor /f "delims=" %%i in ('dir /s /ad /b') do ( for /f "tokens=3" %%j in ('dir "%%i" ^|findstr /i file') do ( set xj=%%j if "!xj:,=!" equ "0" rd /s /q "%%i" ) )
读取文件夹的磁盘占用,通过if语句判断磁盘占用是否为0,如果为0 ,执行删除动作。