2012-03-26 15 views
0

特定のファイル(.svn)のみを含む空のディレクトリとディレクトリをすべて削除するバッチファイルが必要です。特定のファイル(バッチファイル)のみを含む空のディレクトリとディレクトリを削除する

例:

Folder1      -- folder conatins subfolders with some files, not remove 
    Folder2     -- empty folder, folder should be deleted 
    Folder3     -- folder contains only .svn, folder should be deleted 
      .svn 
    Folder4     -- folder contains subfolder with file, not remove 
      Folder41   -- folder contains some file, not remove 
       somefile.dat 
    Folder5     -- folder contains some file, not remove 
      .svn 
      somefile.dat 
    Folder6     -- folder contains empty subfolders, folder should be deleted 
      Folder61   -- folder contains only specific file, folder should be deleted 
       .svn 

結果:

Folder1 
    Folder4  
      Folder41 
       somefile.dat 
    Folder5 
      .svn 
      somefile.dat 

答えて

1

私はこれにかかるどのように少しのコードで驚きました。最大の方法はDIR /B /S /ADの出力にSORT /Rを使用して、フォルダ階層の親ノードを処理する前に子ノードを処理できるようにすることです。

すぐにコードをテストしましたが、安全にテストしてください。

この第1バージョンは、フルファイル名である".SVN"を前提としています。

@echo off 
setlocal disableDelayedExpansion 
for /f "eol=: delims=" %%A in ('dir /b /s /ad ^| sort /r') do (
    dir /b "%%A" | findstr /livx ".svn" >nul || rd /s /q "%%A" 
) 

第2版は、"*.SVN"を意味する場合はわずかに変更されています。 FINDSTRオプションは1つだけ変更されます。

@echo off 
setlocal disableDelayedExpansion 
for /f "eol=: delims=" %%A in ('dir /b /s /ad ^| sort /r') do (
    dir /b "%%A" | findstr /live ".svn" >nul || rd /s /q "%%A" 
) 

更新日:2012年11月6日

私は非空のフォルダが.SVN命名された場合は、上記の溶液(s)は敗北することができることを実現しました。コードは、空であるか、.SVNという名前のファイルのみを含むフォルダを削除する必要があります。 .SVNという名前の空でないフォルダがある場合は、フォルダを削除しないでください。以下は

最初のソリューションのための修正です:

@echo off 
setlocal disableDelayedExpansion 
for /f "eol=: delims=" %%A in ('dir /b /s /ad ^| sort /r') do (
    dir /b "%%A"|findstr /livx ".svn" >nul||>nul 2>&1 dir /b /ad .svn||rd /s /q "%%A" 
) 

そして、ここにされて第二の溶液の修正

@echo off 
setlocal disableDelayedExpansion 
for /f "eol=: delims=" %%A in ('dir /b /s /ad ^| sort /r') do (
    dir /b "%%A"|findstr /live ".svn" >nul||>nul 2>&1 dir /b /ad *.svn||rd /s /q "%%A" 
) 
+0

Aaaand通常の注意が '用/ F'に適用されます。これは解除されますコンソールをラスタフォントとUnicodeファイル名に設定します;-)。あなたが私よりもバッチについてもっと知っているとすれば、私はあなたに何か新しいことを教えているとは思いません:) – Joey

+0

@Joey - ありがとう。はい、以前はUnicodeの問題を報告していましたが、いいえ、このケースでは考えていませんでした。以前はUnicodeのファイル名を使用したことはありませんでしたので、警告を表示していただきありがとうございます。 – dbenham

+0

正常に動作します。私は最後の3日間スクリプトを書こうとしていますので、どうもありがとう! – Dima

関連する問題