批处理文件3:实现删除空文件夹树功能

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

delete.bat

delete.csh

功能:

删除某一目录树中的空目录。

格式:

delete(.bat) dirname

sh delete.csh dirname或(设置了chmod +x delete.csh后)./delete.csh dirname

注意:

1.两者都是通过递归调用实现从目录树的最深层向上逐层删除的功能,主要功能语句,是for循环,判断是否为目录,如果是,进入其子目录,当到达目录的最深层,判断其是否为空(通过两个for循环分别判断是否有文件、文件夹),如果为空,删除;然后逐级向上进行相同操作。

2.在递归调用的过程中,不能使用变量(如下例中的d),如delete.bat文件中

for /D %%m in (%1\*) do call %0 %%m

set /A n=0

for %%m in (%1\*) do set /A n=n+1

for /D %%m in (%1\*) do set /A n=n+1

if %n% EQU 0 rmdir %1&&echo delete %1

不能写作

for /D %%m in (%d%\*) do call %0 %%m

set /A n=0

for %%m in (%d%\*) do set /A n=n+1

for /D %%m in (%d%\*) do set /A n=n+1

if %n% EQU 0 rmdir %d%&&echo delete %d%

因为在批处理文件中,没有堆栈,作为变量d,会在下一层递归中被改变数值,造成运行错误,而不会像高级语言(c语言等)那样。

DOS下

@echo off

for /D %%m in (%1\*) do call %0 %%m

set /A n=0

for %%m in (%1\*) do set /A n=n+1

for /D %%m in (%1\*) do set /A n=n+1

if %n% EQU 0 rmdir %1&&echo delete %1

Linux下

for name in $1/*

do

if test -d $name

then

sh delete.csh $name

fi

done

var=0

for x in $1/*

do

if test -d $x

then

var=`expr $var + 1`

fi

if test -f $x

then

var=`expr $var + 1`

fi

done

if [ $var -eq 0 ]

then

rmdir $1

fi

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有