Subversion の管理フォルダを削除

プロパティ
PSIsContainer
これでフォルダかどうかの判定が出来るのは初めて知った。

PowerShellのコードは適当に作った為、対象の「SVN」管理フォルダを削除した後に、そのフォルダの子階層をのぞこうとしてエラー出てる感じが見られました。
今度再帰処理のものに書き換えておこう。

$target = "絶対パス"
$svn_name = '.svn'


filter svn_del {
    rmdir $_.FullName -Force -Recurse -WhatIf
}
dir -Path $target -Force -Recurse |
    ? { $_.PSIsContainer -eq 'true' -and $_.Name -eq $svn_name } |
    svn_del


コマンドプロンプトのほうが簡素だったりします。

cd "絶対パス"
for /R %i in (.svn) do rd /Q /S "%i"


再帰処理版

$target = "絶対パス"
$svn_name = '.svn'

#階層が多いとスタックオーバーフローの恐れあり
function CheckSvnDir($target) {
    $paths = dir $target -Force
    foreach ($path in $paths) {
        if ($path.PSIsContainer -eq 'true') {
            if ($path.Name -eq $svn_name) {
                #svnフォルダの場合は削除する。(強制削除)
                rmdir $path.FullName -Force -Recurse -WhatIf
            } else {
                #svnフォルダ以外のフォルダは再帰的にチェックを行う。
                CheckSvnDir($path.FullName)
            }
        }
    }
}
CheckSvnDir($target)


■修正版

$target = "絶対パス"
$svn_name = '.svn'

filter svn_del {
    rmdir $_.FullName -Force -Recurse
}
dir -Path $target -Force -Recurse |
    ? { $_.PSIsContainer -eq 'true' -and $_.Name -eq $svn_name } |
    ? { Test-Path $_.FullName -PathType Container  } |
    svn_del