【问题标题】:Command line tool to delete folder with a specified name recursively in Windows?在Windows中递归删除具有指定名称的文件夹的命令行工具?
【发布时间】:2010-10-06 00:04:16
【问题描述】:

我想删除每个文件夹和子文件夹中的每个“_svn”...

例如

C:\ 项目1 _svn 图片 _svn 横幅 _svn 纽扣 _svn

然后我运行类似

rm-recurse c:\proyect1 _svn

我应该得到:

C:\ 项目1 图片 横幅 纽扣

理想的东西是一个小的独立 EXE 或类似的东西。

-- 感谢格兰特,我一发布问题,就看到SVN 关于 SVN 导出命令的文档,但我也想删除 Visual Studio 创建的 _vti_* 文件夹,所以我还将探索for 解决方案。

【问题讨论】:

  • 请以问题的形式重新表述;您是在开发工具方面寻求帮助,还是想知道是否有任何此类工具可用?
  • .bat 文件并不能解决所有 Windows 问题。有时你必须先用命令和东西填充它们。

标签: windows file utilities administration


【解决方案1】:

类似于 BlackTigerX 的“for”,我打算建议

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

【讨论】:

  • 是的,因为这个“for”的本质是它在递归目录树时将“_svn”添加到每个目录条目。
  • 虽然这已经2岁多了,但你教会了我一些新东西!谢谢。
  • @DavidKEgghead,只需替换“。” (当前目录)与您要搜索的目录。如果您的目标包含空格,请务必将其括在引号中。因此,您可以使用:for /d /r "D:\Projects" %d in (_svn) do @if exist "%d" rd /s/q "%d" 我经常通过先用 echo 替换实际的“工作”来测试这些:for /d /r "D:\Projects" %d in (_svn) do @if exist "%d" echo "%d",这样我就可以看到我会影响什么。
  • 当我以递归方式运行时,有时我会得到“the-directory-is-not-empty”为什么会这样?这背后的原因可能是什么?
  • 如果你想把它保存到一个bat文件中,别忘了把%换成%%。
【解决方案2】:

是时候学习一些 PowerShell ;o)

Get-ChildItem -path c:\projet -Include '_svn' -Recurse -force | Remove-Item -force -Recurse

第一部分递归查找每个 _svn 文件夹。强制用于查找隐藏文件夹。 第二部分用于删除这些文件夹及其内容。 Remove commandlet 带有一个方便的“whatif”参数,允许预览将要执行的操作。

PowerShell 可用于 Windows XP 和 Windows Vista。它默认存在于 Windows 7 和 Windows Server 2008 R2 上。

这是一款 MS 产品,它是免费的,而且非常棒!

【讨论】:

  • 此解决方案在 windows server 2008 R2 上完美运行。谢谢
  • 有谁知道“whatif”参数的语法来预览将要做什么?
  • 只需在行尾添加“-whatif”即可。这是 Remove-Item Cmdlet 的一个选项
【解决方案3】:

用于从 BATCH 文件中包含/调用(例如用于删除 Debug 和 Release 文件夹):

for /d /r . %%d in (Debug Release) do @if exist "%%d" echo "%%d" && rd /s/q "%%d"

在批处理文件中需要双 % 才能用作转义字符。否则报语法错误。

谢谢。

【讨论】:

    【解决方案4】:
    for /f "usebackq" %d in (`"dir _svn /ad/b/s"`) do rd /s/q "%d"
    

    http://ebersys.blogspot.com/2008/07/recursively-delete-svn-folders-easy-way.html

    【讨论】:

    • 我收到一个错误:找不到 dir 文件,我尝试使用 cmd.exe /c dir ...,但我得到了同样的错误,但是,JMD 的解决方案是诀窍...
    • 糟糕,我检查了您链接到的页面,似乎缺少几个 ´´(单引号)...修复也可以解决问题...
    【解决方案5】:

    在 Windows 中?如果您使用的是 tortoiseSVN,您可以使用 export 命令导出项目的副本,而无需 .svn/_svn 文件夹。

    【讨论】:

    • 无论您是否在 Windows 上,您都可以使用命令行工具进行 svn 导出。
    • 我认为人们最终需要递归删除 .svn/_svn 文件夹的原因是因为他们直接将本地工作副本复制到新位置,以便对修改后的文件夹进行比较版本与干净的导出相比,即在修改后的本地工作副本出现问题之后。 (至少这就是我需要它的原因。如果可能的话,使用 'svn export' 绝对更容易/更快。)
    【解决方案6】:
    import os
    import shutil
    
    curdir = os.path.abspath(os.path.dirname(__file__))
    
    def removedir(dirname, name = ".svn"):
        if os.path.isdir(dirname):
            for file in os.listdir(dirname):
                if os.path.isdir(os.path.join(dirname, file)) and file == name:
                    thedir = os.path.join(dirname, name)
                    shutil.rmtree(thedir)
                    print ".",
                else:
                    removedir(os.path.join(dirname, file))
    

    我认为你可以试试这个 Python 脚本,如果你安装了 Python,它可以在任何操作系统下运行。

    【讨论】:

      【解决方案7】:

      这里...使用 FreeCommander 或 TotalCommander

      http://www.broobles.com/blog/posts/36

      苏珊达尼

      【讨论】:

      • 作为 TotalCommander(以前的 Windows Commander!)的长期用户,我不能让这个答案保持否定。对于已经安装了 TC 的人来说,这是一个很棒的简单解决方案。我很高兴学会了这个绝妙的技巧。谢谢!
      • 这里最直接的解决方案!
      【解决方案8】:

      SVN Forum 的另一个选项:将 XCopy 与包含要排除的文件/目录列表的文件一起使用(在这种情况下为 .svn 或 _svn)

      XCopy C:\VersionedFolder C:\UnVersionedFolder /EXCLUDE:C:\No.SVN.txt /E /C /I /F /R /Y
      

      【讨论】:

      • ROBOCOPY,不需要列表文件。
      猜你喜欢
      • 2012-11-29
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 2018-11-13
      • 2017-08-14
      • 1970-01-01
      相关资源
      最近更新 更多