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

类别:编程语言 点击:0 评论:0 推荐:

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

本文地址:http://com.8s8s.com/it/it22270.htm