用于删除.svn文件和文件夹的Windows批处理文件

25

为了删除 "myfolder" 文件夹中所有的".svn"文件/文件夹/子文件夹,我在批处理文件中使用以下简单命令:

FOR /R myfolder %%X IN (.svn) DO (RD /S /Q "%%X")

这个方法是行得通的,但如果没有“.svn”文件或文件夹,则批处理文件会显示警告:“系统找不到指定的文件。” 这个警告很嘈杂,因此我想知道如何让它明白:如果找不到“.svn”文件或文件夹,它必须跳过RD命令。

通常使用通配符就足够了,但在这种情况下,我不知道该如何使用它们,因为我不想删除带有“.svn”扩展名的文件或文件夹,而是要删除名为“.svn”的文件或文件夹,所以如果我这样做:

FOR /R myfolder %%X IN (*.svn) DO (RD /S /Q "%%X")

它将不会再删除名为“.svn”的文件/文件夹。我也尝试过以下方法:

FOR /R myfolder %%X IN (.sv*) DO (RD /S /Q "%%X")

但是它也没用,它删不掉任何东西。


6
你知道 SVN 的导出功能吗?http://svnbook.red-bean.com/en/1.0/re10.html“从工作副本中导出一个干净的目录树”。 - nickf
@nickf:谢谢你告诉我,但我需要完成另一个任务,需要删除 .svn 文件/文件夹。 - Marco Demaio
请注意,使用新版本的SubVersion(自1.7以来),.svn元数据文件夹仅位于检出的根级目录中,而不是每个目录中。 - macetw
8个回答

41

你可以尝试

FOR /R myfolder %%X IN (.svn) DO (RD /S /Q "%%X" 2>nul)

14
这个只在批处理文件中起作用。当你直接在控制台窗口使用时,应该去掉第二个百分号。所以应该是这样的:FOR /R myfolder %X IN (.svn) DO (RD /S /Q "%X" 2>nul)。 - Chris W

4
for /f "tokens=* delims=" %%i in ('dir /s /b /a:d *svn') do (rd /s /q "%%i")

命令提示符:for /f“tokens=* delims =”% i in('dir /s /b /a:d * svn')do(rd /s /q“% i”) - acheo

2
使用find函数类似于以下代码:
rm -rf `find . -name ".svn" -type d`

编辑:

我知道这是针对Linux的(我读成了bash而不是batch)。我将其保留在此处,以帮助那些可能会随机到达此处的Linux用户 :)


@nickf:使用“Windows批处理文件”有什么问题吗?我的意思是带有 .BAT 扩展名的文件。 - Marco Demaio
@Marco,你说的没错。Niklaos只是给了一个基于Unix的答案而已。 - nickf

1

实际上,这个答案来自Jesper Rønn-Jensen的网站:http://justaddwater.dk/2011/03/01/easy-delete-all-svn-subfolders-in-windows-explorer/

我认为这样做更加容易,所以我想分享一下。我正在将几个项目从.SVN转换为.GIT,所以这很棒。它会在资源管理器中添加一个菜单项,以便您可以删除文件夹。创建一个.reg文件并导入即可。

enter image description here

Windows Registry Editor Version 5.00
;
; Running this file will give you an extra context menu item in Windows Explorer
; "Delete SVN folders"
;
; For the selected folder, it will remove all subfolders named ".svn" and their content
; Tip from http://www.iamatechie.com/remove-all-svn-folders-in-windows-xp-vista/
;
; Enrichened with comments by Jesper Rønn-Jensen ( http://justaddwater.dk/ )
;
;
[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 && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" \""

0
如果你想要在Windows中删除所有名为.svn的子文件夹,则创建具有以下内容的批处理文件:
for /f "tokens=* delims=" %%i in ('dir /s /b /a:d *.svn') do (
rd /s /q "%%i"
)

将其保存在文件del_All_Dot_SVN_Folders.cmd中。运行它。完成。

感谢http://www.axelscript.com/2008/03/11/delete-all-svn-files-in-windows/

请记住,上述代码具有 .svn,而链接中的代码仅具有 *svn,因此最好使用 .svn 以避免意外产生不良影响。


0

奇怪的旁注:如果我使用

FOR /R . %%X IN (*.svn) DO (echo "%%X")

替代


FOR /R myfolder %%X IN (.svn) DO (RD /S /Q "%%X")

它不仅列出所有以 .svn 结尾的目录,还列出它们所有的内容。这是 For 命令中的一个 BUG,它在我没有使用通配符的情况下进行了扩展。非常奇怪。

Ken


-1

这是我最喜欢的,它简单而紧凑:

find ./ -name ".svn" | xargs rm -Rf

Fissh


-2

在Windows上删除所有svn文件

for /d /r . %d in (.svn) do @if exist "%d" rd /s/q "%d"

.svn 是文件夹名称


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