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