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

|