Windowsコマンドプロンプトを使用して、アプリケーションフォルダーからすべての空のフォルダーを削除する必要がありますか?
そのようなbatファイルを作成するにはどうすればよいですか?
私を助けてください。
for /f "usebackq" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"
from: http://blogs.msdn.com/b/oldnewthing/archive/2008/04/17/8399914.aspx
もちろん、コマンドを実行する前に、削除せずに最初にテストします。また、スペース付きのフォルダーを含むコメントの修正版も次のとおりです。
for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"
追伸ブログ投稿に役立つコメントが他にもありますので、試してみる前にそれらも読んでください
ROBOCOPYを使用できます。非常にシンプルで、大きな階層内の空のフォルダーを削除するためにも使用できます。
ROBOCOPY folder1 folder1 /S /MOVE
ここでは、他の(必要な)ファイルを別のフォルダーに移動するのではなく、空のフォルダーのみを削除する必要があるため、ソースと宛先の両方がfolder1
です。 /S
オプションは、空のフォルダーのコピー(上記の場合は移動)をスキップします。また、ファイルが同じドライブ内で移動されるため、高速です。
より簡単な方法は、/ sスイッチを使用してxcopyを実行し、ディレクトリ構造全体のコピーを作成することです。/sのヘルプは、空のものを除いてディレクトリとサブディレクトリをコピーします。
xcopy dirA dirB /S
ここで、dirAは空のフォルダーを持つソースです。 DirBは空のフォルダーのないコピーになります
Usebackqは必要ありません:
FOR /F delims^= %%A IN ('DIR/AD/B/S^|SORT/R') DO RD "%%A"
同じ参照ページから腐食した回答に追加されるのはPowerShellバージョンです http://blogs.msdn.com/b/oldnewthing/archive/2008/04/17/8399914.aspx#8408736
Get-ChildItem -Recurse . | where { $_.PSISContainer -and @( $_ | Get-ChildItem ).Count -eq 0 } | Remove-Item
または、より簡潔に、
gci -R . | where { $_.PSISContainer -and @( $_ | gci ).Count -eq 0 } | ri
クレジットは投稿者に送られます
コマンドラインから:/ R/D%1 in(*)do rd "%1"
(*)の/ R/D %% 1のバッチファイルでrd "%% 1"を実行
文書化されているかどうかはわかりませんが、W2K、XP、およびWin 7で機能します。また、常に機能するかどうかはわかりませんが、誤ってファイルを削除することはありません。
これは上記のハイブリッドです。 X日より古いすべてのファイルを削除し、指定されたパスの空のフォルダーを削除します。使用するには、単に日、フォルダパス、ドライブを設定します
@echo off
SETLOCAL
set days=30
set folderpath=E:\TEST\
set drive=E:
::Delete files
forfiles -p %folderpath% -s -d -%days% -c "cmd /c del /q @path "
::Delete folders
cd %folderpath%
%drive%
for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"`
Windows用のUNIXインタープリター(CygwinまたはGit Bash)をインストールし、cmdを実行します。
/ path/to/directory -empty -type dを見つけます
To find them
/ path/to/directoryを検索-empty -type d -delete
To delete them
(実際にはwindows cmdプロンプトを使用していませんが、簡単で実行に数秒かかりました)
@echo off
set /p "ipa= ENTER FOLDER NAME TO DELETE> "
set ipad="%ipa%"
IF not EXIST %ipad% GOTO notfound
IF EXIST %ipad% GOTO found
:found
echo DONOT CLOSE THIS WINDOW
md ccooppyy
xcopy %ipad%\*.* ccooppyy /s > NUL
rd %ipad% /s /q
ren ccooppyy %ipad%
cls
echo SUCCESS, PRESS ANY KEY TO EXIT
pause > NUL
exit
:notfound
echo I COULDN'T FIND THE FOLDER %ipad%
pause
exit
正常に動作します。これは、古いファイルを削除し、空のディレクトリを再帰的に削除する最良の方法です。次の.batファイルは、
forfiles /p [PATH] /s /m [FILE-PATTERN] /d -[DAYS] /c "cmd /c del @path"
for /f "delims=" %%d in ('dir [PATH] /s /b /ad ^| sort /r') do rd "%%d"
プレースホルダーは、次のように(引用符なしで)置き換える必要があります。
[DAYS] = Max. age of the files in days, e.g. “10”
[PATH] = Path to search for old files and empty folders, e.g. “C:\Backup\”
[FILE-PATTERN] = Pattern that matches files to delete, e.g. “*.bkp”
スクリプトは、Windows 7およびWindows Server 2003で正常にテストされています。