批处理练手(2015-6-29 update)

1,打印当前目录及子目录的磁盘占用

代码如下:

@echo off
echo 正在统计占用的空间……
echo ========================
dir|findstr /i "file(" > 1.txt
for /f "delims=) tokens=2" %%i in (1.txt) do echo 当前磁盘占用为:%%i
echo ========================
dir /ad /b > 2.txt
for /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.txt
echo ========================
pause

上面是自己写的,感觉好麻烦,而且只能查看当前目录和下一级子目录的磁盘占用,对更深的子目录不起作用。而且,个人感觉实现好臃肿,应该有更便捷的方法。

2,打印当前目录及子目录的磁盘占用(代码1-改进)

代码如下:

@echo off
echo 正在计算当前目录磁盘占用……
echo ===========================
for /f "tokens=3,4" %%i in ('dir ^| findstr /i 个文件') do echo 当前目录磁盘占用:%%i%%j
echo ===========================
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 off
echo 正在计算当前目录磁盘占用……
echo ===========================
for /f "tokens=3,4" %%i in ('dir ^| findstr /i 个文件') do echo 当前目录磁盘占用:%%i%%j
echo ===========================
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 off
echo 正在计算当前目录磁盘占用……
echo ===========================
for /f "tokens=3,4" %%i in ('dir ^| findstr /i 个文件') do echo 当前目录磁盘占用:%%i%%j
echo ===========================
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 off
echo 正在计算当前目录磁盘占用……
echo ===========================
for /f "tokens=3,4" %%i in ('dir ^| findstr /i "File( 个文件"') do echo 当前目录%~dp0 磁盘占用:%%i%%j
echo ===========================
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=%%l
if "!xy:,=" gtr "1024000" echo 磁盘占用大于100M的目录有:%%k,大小为%%l%%m
)
)
pause

增加if语句做条件判断,只输出大于100M的文件夹。


3,删除当前目录和子目录的空文件夹

方法1
@echo off &setlocal enabledelayedexpansion
for /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 enabledelayedexpansion
for /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 ,执行删除动作。


你可能感兴趣的:(批处理,练习)