🗂️

Windowsで重たいフォルダを素早く削除する方法+削除用batファイル

2024/02/05に公開

Windowsの重いフォルダを素早く削除する方法

ローカルPCに構築したC#の開発環境を削除しようとしたのですが、大容量フォルダの削除に非常に時間がかかりました。
「windows フォルダ 削除 遅い」でググってみると以下の記事にヒットしました。

https://cafebreak.hatenablog.com/entry/2023/11/22/071539

どうもエクスプローラーから操作をすると、削除実行に時間がかかるようです。
以下のコマンドを実行すると高速でフォルダを削除できるようです。

del /f /s /q foldername > nul
rmdir /s /q foldername

上記コマンドを実行すると、確かにエクスプローラーから操作するよりも素早く削除できました。

削除用batファイル

上記コマンドは今後も使う機会がありそうなのと、毎回コマンドを手入力で実行するのも面倒なのでバッチファイルを作成してみました。
お役に立てれば幸いです。

FolderDeleter.bat
@echo off
setlocal EnableDelayedExpansion

:: 警告文表示
echo 警告: このスクリプトを実行すると、指定されたフォルダとその中身が完全に削除されます。元に戻すことはできません。
echo 削除を続行する前に、削除するフォルダが正しいことを確認してください。
echo.

:: 削除対象フォルダの入力
:inputFolderPath
set folderPath=
set /p "folderPath=削除したいフォルダのパスを入力してください: "

:: 絶対パスを取得
for %%I in ("!folderPath!") do set "absolutePath=%%~fI"

:: バリデーション
if "!absolutePath!"=="" (
    goto inputFolderPath
) else if not exist "!absolutePath!" (
    echo 指定されたフォルダパスは存在しません。
    goto inputFolderPath
) else if not exist "!absolutePath!\*" (
    echo 指定されたパスはフォルダではありません。
    goto inputFolderPath
) else if /i "!absolutePath!"=="C:\" (
    echo Cドライブのルートディレクトリは削除できません。
    goto inputFolderPath
)

:: 削除確認
echo 次のフォルダが削除対象です: !absolutePath!

:confirmDeletion
set confirmation=
set /p "confirmation=本当にこのフォルダを削除しますか?(Y/N): "
if /i "!confirmation!"=="n" (
    echo 操作をキャンセルしました。
    goto inputFolderPath
) else if /i not "!confirmation!"=="y" (
    goto confirmDeletion
)

:: フォルダ削除
echo 削除を実行しています...
del /f /s /q "!absolutePath!" > nul
rmdir /s /q "!absolutePath!"
if exist "!absolutePath!" (
    echo フォルダの削除に失敗しました。使用中または保護されている可能性があります。
) else (
    echo フォルダの削除に成功しました。
)

echo.
goto inputFolderPath

batファイルなのでエクスプローラーからダブルクリックして起動できます。

誤って削除しないよう、いくつかの機能を設けました。

  • 初期起動時に警告文を表示。
  • ファイルパスおよびC:\(Cドライブのルートディレクトリ)は指定不可。
  • 削除前確認としてフォルダの絶対パスを表示&「Y」を押下しないと削除されない。

あと、複数のフォルダを連続して削除できるよう、削除後は再度フォルダパスの入力を求めるループに戻るようにしました。

ファイルの実行結果は以下です。

警告: このスクリプトを実行すると、指定されたフォルダとその中身が完全に削除されます。元に戻すことはできません。
削除を続行する前に、削除するフォルダが正しいことを確認してください。

削除したいフォルダのパスを入力してください: C:\
Cドライブのルートディレクトリは削除できません。
削除したいフォルダのパスを入力してください: test-file.txt
指定されたパスはフォルダではありません。
削除したいフォルダのパスを入力してください: test-folder
次のフォルダが削除対象です: C:\path\to\test-folder
本当にこのフォルダを削除しますか?(Y/N): n
操作をキャンセルしました。

削除に失敗した場合は以下です。

削除したいフォルダのパスを入力してください: test-folder
次のフォルダが削除対象です: C:\path\to\test-folder
本当にこのフォルダを削除しますか?(Y/N): y
削除を実行しています...
プロセスはファイルにアクセスできません。別のプロセスが使用中です。
C:\path\to\test-folder\excel.xlsx - プロセスはファイルにアクセスできません。別のプロセスが使用中です。
C:\path\to\test-folder\~$excel.xlsx - プロセスはファイルにアクセスできません。別のプロセスが使用中です。
フォルダの削除に失敗しました。使用中または保護されている可能性があります。

削除したいフォルダのパスを入力してください:

削除に成功した場合は以下です。

削除したいフォルダのパスを入力してください: test-folder
次のフォルダが削除対象です: C:\path\to\test-folder
本当にこのフォルダを削除しますか?(Y/N): y
削除を実行しています...
フォルダの削除に成功しました。

削除したいフォルダのパスを入力してください: test-folder
指定されたフォルダパスは存在しません。

参考

https://superuser.com/questions/76906/deleting-large-amount-of-files-in-windows-is-slow

Discussion