使用Windows注册表删除所有.svn和.project文件

时间:2011-11-27 12:25:39

标签: windows batch-file registry

我有一个注册表文件,当右键单击目录时删除.svn文件。我想扩展这个Windows注册表文件,以删除从Zend Studio创建的一些临时文件:

  • .buildpath
  • 的.project
  • .settings(目录)

根据此问题的答案:Windows batch file to delete .svn files and folders

我有:

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

2 个答案:

答案 0 :(得分:6)

我认为这就是你要找的东西。我只对最后一行进行了更改。

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]
@="Delete SVN Folders"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]
@="cmd.exe /c \"TITLE Removing SVN Folders in %1 && color 9A && for /r \"%~1\" %%F in (.) do (rd /s /q \"%%~fF\.svn\" \"%%~fF\.settings\" & del \"%%~fF\.buildpath\" \"%%~fF\.project\")2>nul \""

这个解决方案类似于Laf所描述的,除了他建议使用&&和在最后一个命令之前。我认为这可能会给你带来问题,因为下一个命令只有在RD成功时才会执行。但是您当前的算法会尝试从所有子目录中删除该目录,即使它不存在。我使用&这样无论RD的结果如何,总是执行下一个命令(DEL)。我扩展了RD以删除两个目录,添加的DEL命令删除了这两个文件。

我将stderr重定向到nul,这样就不会看到一堆错误消息。该算法效率很低,并且可以根据子目录的数量生成大量错误消息。

如果您的要求变得更复杂,或者您想要开发更高效的脚本,那么最好创建一个完成工作的批处理文件,并从注册表项中调用批处理文件。在一行上读取和维护一组复杂的命令有点麻烦。逃脱序列在注册表中也变得很烦人。

答案 1 :(得分:2)

目前实施的命令的一些细节:

  • cmd.exe /c:将调用一个新的命令解释器,然后执行后面的命令,然后退出(这就是/C所做的)。命令的其余部分(在第一个和最后一个\"之间是由命令解释器执行的命令)
  • TITLE Removing SVN Folders in %1:将命令解释程序的标题更改为“删除文件夹中的SVN文件夹”。
  • COLOR 9A:更改命令解释程序的颜色方案
  • FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\":将删除当前文件夹中名为 .svn 的所有文件夹。

%1表示右键单击的文件夹。命令之间的&&意味着命令解释器将一个接一个地执行所有三个命令。你应该做的是在命令行的末尾添加你自己的命令,如:

@="cmd.exe /c \"TITLE Removing SVN Folders in %1 && COLOR 9A && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" && *MyCommand*\""

其中 MyCommand 是删除临时文件所需的命令。