【问题标题】:Windows batch file to delete .svn files and folders用于删除 .svn 文件和文件夹的 Windows 批处理文件
【发布时间】:2011-02-01 17:29:42
【问题描述】:

为了删除“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")

但它也不起作用,他什么也没删除。

【问题讨论】:

  • 你知道SVN导出功能吗? svnbook.red-bean.com/en/1.0/re10.html "从工作副本中导出一个干净的目录树"
  • @nickf:谢谢你告诉我,但我必须完成一项不同的任务,我需要删除 .svn 文件/文件夹。
  • 请注意,对于新版本的 SubVersion(自 1.7 起),.svn 元数据文件夹仅位于结帐的根级别,而不是每个目录中。

标签: batch-file svn delete-file


【解决方案1】:

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

我认为分享起来要容易得多。我正在将几个项目从 .SVN 转换为 .GIT,所以这很棒。它向资源管理器添加了一个菜单项,以便您可以删除文件夹。创建一个 .reg 文件,然后将其导入。

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

【讨论】:

    【解决方案2】:

    删除windows上的所有svn文件

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

    .svn 是文件夹名称

    【讨论】:

      【解决方案3】:

      使用 find 类似的东西:

      rm -rf `find . -name ".svn" -type d`
      

      编辑:

      我知道这是针对 linux 的(我读的是 bash 而不是批处理)。我把它留在这里是为了帮助那些会随机出现在这里的 Linux 用户:)

      【讨论】:

      • @nickf:“Windows 批处理文件”有什么问题?我的意思是带有 .BAT 扩展名的文件。
      • @Marco,你说的没有错。 Niklaos 刚刚给出了一个基于 unix 的答案,仅此而已。
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        如果要删除 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 不会意外产生不良影响。

        【讨论】:

          【解决方案6】:

          奇怪的旁注:如果我使用

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

          而不是

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

          它不仅列出了所有以 .svn 结尾的目录,还列出了它们的所有内容。这是 For 命令中的一个 BUG,它给了我一个扩展,我没有给它通配符。很奇怪。

          【讨论】:

            【解决方案7】:
            for /f "tokens=* delims=" %%i in ('dir /s /b /a:d *svn') do (rd /s /q "%%i")
            

            【讨论】:

            • cmd 提示:for /f "tokens=* delims=" %i in ('dir /s /b /a:d *svn') do (rd /s /q "%i" )
            【解决方案8】:

            你可以试试

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

            【讨论】:

            • 这仅适用于批处理文件。当您直接在控制台窗口中使用它时,您应该删除第二个 %'s。所以它应该是: FOR /R myfolder %X IN (.svn) DO (RD /S /Q "%X" 2>nul)