批量删除指定目录

 各路仙人各显神通:

直接通过Windows右键解决之

用DOS命令For来做处理。

建立一个.reg文件,然后写入下面内容。

DOS代码
  1. Windows Registry Editor Version 5.00  
  2. [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]  
  3. @="Delete SVN Folders"  
  4. [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]  
  5. @="cmd.exe /c \"TITLE Removing SVN Folders in %1 && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" \""  

运行这个reg文件后,要处理的文件夹下点击右键,选择Delete SVN Folders就可以了。

Java版本

Java代码
  1. // 我也来一段java的删除指定目录下的指定文件或目录,其中部分代码为网上剽窃,原作者不知在哪了。。。。  
  2. // 传参:1.目录,2.要删除的文件夹名、文件名、文件后缀   
  3. public class DelFile {  
  4.   
  5.     public static void main(String[] args) {  
  6.         scanAllFile(new File("E:/工作目录/版本基线/保监会对接系统/bjhsrv/src/com"), ".svn");  
  7.         System.out.println("delete success!");  
  8.     }  
  9.   
  10.     /** 
  11.      * @author xulu 
  12.      * @function 扫描待删除的目录或文件 
  13.      * @root 待扫描的根目录 
  14.      * @suffix 待删除的目录或文件(扩展名匹配) 
  15.      */  
  16.     public static void scanAllFile(File root, String… suffix) {  
  17.         for (File file : root.listFiles()) {  
  18.             if (isMatch(file.getName(), suffix)) {  
  19.                 delAllFile(file);  
  20.             } else if (file.isDirectory()) {  
  21.                 scanAllFile(file, suffix);  
  22.             }  
  23.         }  
  24.     }  
  25.   
  26.     // 判断是否为待删除的目录或文件  
  27.     public static boolean isMatch(String name, String… suffix) {  
  28.         for (String s : suffix) {  
  29.             if (name.endsWith(s)) {  
  30.                 return true;  
  31.             }  
  32.         }  
  33.         return false;  
  34.     }  
  35.   
  36.     // 删除指定的目录或文件  
  37.     public static void delAllFile(File file) {  
  38.         if (file.isDirectory()) {  
  39.             for (File f : file.listFiles()) {  
  40.                 if (!f.delete()) {  
  41.                     delAllFile(f);  
  42.                 }  
  43.             }  
  44.         }  
  45.         file.delete();  
  46.         System.out.println("delete : " + file.getAbsolutePath());  
  47.     }  
  48. }  

删除一个Java目录,最简单的方法就是用 commons-io 包,

代码:FileUtils.forceDelete("D:\\test");

Java代码
  1. public static void delete(File path, final String pattern) throws IOException {  
  2.     path.listFiles(new FileFilter(){  
  3.         @Override  
  4.         public boolean accept(File pathname) {  
  5.             try {  
  6.                 if(pathname.getName().equalsIgnoreCase(pattern)){  
  7.                         FileUtils.forceDelete(pathname);  
  8.                 }  
  9.                 else if(pathname.isDirectory())  
  10.                     delete(pathname, pattern);  
  11.             } catch (IOException e) {}  
  12.             return true;  
  13.         }  
  14.     });       
  15. }  

VB版,带界面哦,赞一个!

ASP/Visual Basic代码
  1. VERSION 5.00  
  2.   
  3. Begin VB.Form DELSVNFILE   
  4.   
  5.     Caption         =   "Form1"  
  6.     ClientHeight    =   3090  
  7.     ClientLeft      =   60  
  8.     ClientTop       =   450  
  9.     ClientWidth     =   4680  
  10.     LinkTopic       =   "Form1"  
  11.     ScaleHeight     =   3090  
  12.     ScaleWidth      =   4680  
  13.     StartUpPosition =   3  ‘Windows Default  
  14.   
  15.     Begin VB.TextBox TxtPath   
  16.         Height          =   615  
  17.         Left            =   720  
  18.         TabIndex        =   1  
  19.         Text            =   "Path"  
  20.         Top             =   720  
  21.         Width           =   2655  
  22.     End  
  23.   
  24.     Begin VB.CommandButton DelFile   
  25.         Caption         =   "删除"  
  26.         Height          =   615  
  27.         Left            =   720  
  28.         TabIndex        =   0  
  29.         Top             =   1680  
  30.         Width           =   2655  
  31.     End  
  32.   
  33. End  
  34.   
  35. Attribute VB_Name = "DELSVNFILE"  
  36. Attribute VB_GlobalNameSpace = False  
  37. Attribute VB_Creatable = False  
  38. Attribute VB_PredeclaredId = True  
  39. Attribute VB_Exposed = False  
  40.   
  41. Private fs As Object  
  42.   
  43. Private Sub DelFile_Click()  
  44.   
  45. On Error GoTo err  
  46.   
  47.     Dim sPath As String  
  48.   
  49.     If Len(TxtPath.Text) = 0 Then  
  50.         MsgBox "请输入路径"  
  51.         Exit Sub  
  52.     Else  
  53.         sPath = TxtPath.Text  
  54.     End If  
  55.   
  56.     Set fs = CreateObject("Scripting.FileSystemObject")  
  57.   
  58.     Dim fol As Object  
  59.   
  60.     Set fol = fs.GetFolder(sPath)  
  61.   
  62.     DelSVN fol  
  63.   
  64.     If fs.FolderExists(sPath & "\ .svn"Then  
  65.         tmp.DeleteFolder sPath & "\ .svn"True  
  66.     End If  
  67.   
  68.     MsgBox "删除完成"  
  69.   
  70.     Exit Sub  
  71.   
  72. err:  
  73.   
  74.     MsgBox "删除文件错误,检查路径是否准确"  
  75. End Sub  
  76.   
  77. Private Sub DelSVN(ByVal fol As Object)  
  78.     For Each SubFol In fol.SubFolders  
  79.         If SubFol.Name = ".svn" Then  
  80.             fs.DeleteFolder SubFol.Path, True  
  81.         Else  
  82.             DelSVN SubFol  
  83.         End If  
  84.     Next  
  85. End Sub  

Shell + Bash脚本指令,Linux常用

代码
  1. # 此为随手抒情版,有一定风险,用前须做好防护措施  
  2. find <target_path> -name <file_or_dir_to_delete> -exec rm -rvf {} \;  

补充附上安全版本:

代码
  1. #!/bin/bash  
  2.   
  3. if [ $# -ne 2 ]   
  4. then  
  5.   echo "Usage: `basename $0` <target_path> <file_to_delete>"  
  6.   exit  
  7. fi  
  8.   
  9. if [ ! -d $1 ]  
  10. then  
  11.   echo "$1 is not a directory."  
  12.   exit  
  13. fi  
  14.   
  15. list=`find $1 -name $2`  
  16.   
  17. if [ ${#list} -eq 0 ]   
  18. then  
  19.   echo "No $2 found under $1"  
  20.   exit  
  21. fi  
  22.   
  23. echo Trying to delete $list, are you sure? \(yes/no\)  
  24. read answer  
  25.   
  26. if [ $answer = ‘yes’ ]  
  27. then  
  28.   rm -rf $list  
  29.   echo "done."  
  30. fi  

个人PHP版

最近一个小网站发布,由于我耍懒,让伙伴传FTP更新,结果不慎将.svn的文件统统上传之。时间也到这会了,现在都5点多了,而且.svn是十分纠结的一个家伙,层层目录都有,尤其对于php这种基于目录结构的脚本语言,手动删除,简直要人命了。遂劝伙伴先睡去,再捣鼓出以下代码。

诸位若是碰到.svn或者类似的纠结问题,可同处之。

PHP代码
  1. <?php  
  2. // $entry       传入初始的路径,是全路径名,要用realpath  
  3. // $target      要找出的目标,不用全路径名,注意只支持单项查找。  
  4. // &$holder     任意数组,这里是传引用,不过用的人不用操心了  
  5. // $isDir       目标是不是一个目录  
  6. // $filter      豁免名单,使用半角逗号隔开,注意别加空格  
  7. // 由于我实在太懒,所以就不检查linux的服务器权限了,  
  8. // 其实$filter就是为了避开那些无权限操作的目录的,那些不是我们关心的重点^_^  
  9.   
  10. function dirAndFindTargetByName($entry$target, &$holder$isDir = true, $filter = null) {  
  11.     $d = dir($entry);  
  12.     if ($filter != null)  
  13.         $filter = ‘,’ . trim($filter‘,’) . ‘,’;  
  14.     while(false !== ($v = $d->read())) {  
  15.         if($v == "." || $v == "..")  
  16.             continue;  
  17.         $file = $d->path.‘/’.$v;  
  18.         $isIt = false;  
  19.         if ($isDir && $v == $target && is_dir($file))  
  20.             $isIt = $file;  
  21.         else if ($v == $target && is_file($file))  
  22.             $isIt = $file;  
  23.           
  24.         if ($isIt)  
  25.             $holder[] = $file;  
  26.         else if (is_dir($file) && $filter != null && stripos($filter‘,’ . $v . ‘,’) === false)  
  27.             dirAndFindTargetByName($file$target$holder$isDir$filter);  
  28.     }  
  29. }  
  30.   
  31.   
  32. // 老实交代,这是从某网站扒的,因为以前也扒过,请原谅我的懒惰。  
  33. // 出处:http://blog.penner.cn/2004/11/15/use-php-delete-directory.html  
  34. // 懒归懒,原作者的创作还是要尊重的  
  35. function removeDir($dirName)  
  36. {  
  37.     $result = false;  
  38.     if(! is_dir($dirName))  
  39.     {  
  40.         trigger_error("目录名称错误", E_USER_ERROR);  
  41.     }  
  42.     $handle = opendir($dirName);  
  43.     while(($file = readdir($handle)) !== false)  
  44.     {  
  45.         if($file != ‘.’ && $file != ‘..’)  
  46.         {  
  47.             $dir = $dirName . DIRECTORY_SEPARATOR . $file;  
  48.             is_dir($dir) ? removeDir($dir) : unlink($dir);  
  49.         }  
  50.     }  
  51.     closedir($handle);  
  52.     $result = rmdir($dirName) ? true : false;  
  53.     return $result;  
  54. }  
  55.   
  56. $currentPath = realpath(‘.’);  
  57. $target = ‘.svn’;  
  58. $list = array();  
  59. dirAndFindTargetByName($currentPath$target$list, true, ‘bbs,upload,2010′);  
  60.   
  61. // $list就是holder,取出了内容在进行处理,逻辑清楚一些,别不三不四的。  
  62.   
  63. echo ‘<h1>共查出’.count($list).‘个’.$target.‘目录</h1>’;  
  64.   
  65. echo ‘<table>’;  
  66. foreach ($list as $path) {  
  67.     if (is_dir($path) && stripos($path$target) !== false) {  
  68.         if (removeDir($path)) {  
  69.             echo ‘<tr>’;  
  70.             echo ‘<td>删除目录:’ . $path . "</td><td style=’color:green;’>…成功!</td>";  
  71.             echo ‘</tr>’;  
  72.         }  
  73.         else {  
  74.             echo ‘<tr>’;  
  75.             echo ‘<td>删除目录:’ . $path . "</td><td style=’color:red;’>…失败!</td>";  
  76.             echo ‘</tr>’;  
  77.         }  
  78.           
  79.     }  
  80. }  
  81. echo ‘</table>’;  
  82. ?>  





发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>