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

3

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

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

根据这个问题的答案:Windows 批处理文件删除 .svn 文件和文件夹

我有:

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\" \""

你确切的问题是什么?你是在请求别人为你实现吗?你尝试过一些东西但是遇到了问题吗? - gregwhitaker
是的,我想请你帮忙删除多余的文件。我会尝试自己做,但我不知道从哪里开始。 - John Magnolia
听起来你已经有了一个起点,即用于删除svn文件的命令行。只需将其调整为删除其他想要删除的文件即可。 - Raymond Chen
是的,我已经有了一个起点,但我真的不知道这行代码在做什么。对于初学者来说,这段代码并不容易阅读。我尝试将“(.svn)”更改为“(.svn,.settings)”,但这会破坏代码。 - John Magnolia
请注意,对于删除 .svn 文件,还有一个标准的 svn 命令:svn export(http://svnbook.red-bean.com/en/1.0/re10.html),可以通过 shell 扩展程序(如 turtoisesvn)(http://tortoisesvn.net/features.html)使用。 - The Nail
谢谢,但我发现从Zend Studio导出时这个方法不起作用。 - John Magnolia
2个回答

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成功时才会执行。但是你当前的算法试图从所有子目录中删除目录,即使它不存在。我使用&,以便下一个命令(DEL)始终执行,无论RD的结果如何。我扩展了RD以删除两个目录,并添加了DEL命令以删除两个文件。
我将stderr重定向到nul,以便您不会看到一堆错误消息。该算法非常低效,根据子目录的数量可以生成大量错误消息。
如果您的要求变得更加复杂,或者如果您想开发一个更有效的脚本,最好创建一个批处理文件来完成工作,并从注册表条目中调用批处理文件。在单行上阅读和维护一组复杂的命令有点混乱。在注册表中,转义序列也变得烦人。

2

以下是当前实现的命令的一些详细信息:

  • cmd.exe /c: 将调用一个新的命令解释器,并执行随后的命令,然后退出(这就是/C的作用)。命令的其余部分(在第一个和最后一个\"之间)是将由命令解释器执行的命令
  • TITLE Removing SVN Folders in %1: 将命令解释器的标题更改为“Removing SVN Folders in folder”。
  • 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是您需要删除临时文件的命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接