如何在确认提示后删除SVN目录?

时间:2010-02-02 15:32:13

标签: svn powershell scripting command

我希望能够从目录中删除.SVN文件夹。

我发现以下注册表黑客可以让你做到这一点......

http://weblogs.asp.net/jgalloway/archive/2007/02/24/shell-command-remove-svn-folders.aspx

然而,我不喜欢这个解决方案的一件事是它根本没有给出任何确认。我希望它能够执行此cmd脚本的功能,但首先会获得确认提示。

有什么想法吗?

修改 我的理解是SVN Export不会复制出未版本控制的文件。这就是我要求的原因。

赛斯

6 个答案:

答案 0 :(得分:4)

您可以使用Subversion命令行并运行svn export如果您使用的是TortoiseSVN,则可以使用this

答案 1 :(得分:1)

尝试修改脚本。它在运行目录删除之前添加了一个提示:

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 && choice /m "Remove SVN folder" && if ERRORLEVEL 2 goto done && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" && :done \""

答案 2 :(得分:0)

删除隐藏在该脚本中的RD命令的/ q选项。

这应该导致每次调用rd(删除目录)来询问...

但与此同时,我会问你为什么不使用svn导出选项。

答案 3 :(得分:0)

如果你完全使用Perl,这里有一个我用来做这个的小脚本,再加上其他目录类型(方便的/ bin,等等......来自VS):

#!/usr/local/bin/perl -w
#-------------------------------------------------------------------------------
# removedirs.pl - Recursively removes directories from a given root folder
# Author: Nick Gotch
# Date: 07-13-2009
#-------------------------------------------------------------------------------
use strict;
use warnings;
use File::Path;

#-------------------------------------------------------------------------------
# User Setting Variables
#-------------------------------------------------------------------------------
my $basepath = 'C:\\Path\\to\\RootDir\\';

#-------------------------------------------------------------------------------
# Processing
#-------------------------------------------------------------------------------
# Prompt for Confirmation
syswrite(STDOUT, "Confirm removal of directories?\nPress 'Y' to confirm.\n");
$confirm = <STDIN>;
if($confirm =~ /^[Yy]$/)
{
    # Add lines here to remove other dirs...
    RemoveDir($basepath, ".svn");
    syswrite(STDOUT, "Done.\nPress <ENTER> to close.\n");
}
<STDIN>;

sub RemoveDir
{
    my ($directory, $dirtodelete) = @_;

    if(-e $directory.'\\'.$dirtodelete.'\\')
    {
        rmtree($directory.$dirtodelete.'\\');
        syswrite(STDOUT, "Removed: ".$directory.$dirtodelete.'\\'."\n");
    }

    opendir(DIR, $directory);
    my @subdirlist;

    while(my $subdir = readdir(DIR))
    {
        if(($subdir ne '.') && ($subdir ne '..') && (-d $directory.$subdir))
        {
            push(@subdirlist, $directory.$subdir.'\\');
        }
    }

    closedir(DIR);

    foreach my $subdir (@subdirlist) { RemoveDir($subdir, $dirtodelete); }
}

答案 4 :(得分:0)

如果您将脚本的内容放入cmd文件,然后设置注册表以使其指向此cmd文件,该怎么办?然后,您可以添加各种操作,例如Wikipedia中的示例。我希望这可以帮助您创建解决方案。

答案 5 :(得分:0)

尝试使用此值作为reg值的Powershell命令:

C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe -Command“&amp; {if((读取主机'确认删除.SVN文件夹。按Y或N')-eq'y' ){Get-ChildItem'%1'-r * .svn |?{$ _.PSIsContainer} | Remove-Item -r -force -verbose -ea 0; Read-Host'按enter键退出'}}“

如果您不想删除文件,请删除-verbose。