🗂️

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

2024/02/05に公開1

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

ShinShin

削除用batファイルに変更を加えてファイルの削除を試していたところ、指定していないディレクトリのファイルが多数削除されるという問題が発生しました。自身でも調べてみたのですが、なぜそのような挙動になったのが原因がわからず、お力添え頂けますと助かります。

実際にbatファイルで実行したものは以下の2つです。

@echo off
setlocal EnableDelayedExpansion

:: 削除対象フォルダの入力
:inputFolderPath
set folderPath=D:(英語名称)(日本語名称)(英)(英)(日)(英)

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

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

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


@echo off
setlocal EnableDelayedExpansion

:: 削除対象フォルダの入力
:inputFolderPath
set folderPath=D:(英語名称)(日本語名称)(英)(英)(日)(英)

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

1つ目の方はプロンプトが一瞬現れるだけで、2つ目の方はアクセスが拒否されたといったようなエラーが表示され、両方とも削除対象ディレクトリの削除は行われませんでした。
作成して頂いたコマンドをそのまま使った場合は問題なく削除されました。
上記全てにおいて管理者権限は付与せずの実行で、対象ディレクトリも同一です。

実行環境はWindows11で、削除対象フォルダはDドライブ上にあり、batファイルはCドライブのデスクトップに配置して実行していました。
1つ目のコマンドを実行したあとすぐ2つ目のコマンドに書き換えて実行してしまい、その後問題に気がついたためどちらのコマンドが原因なのかは分かりません。

具体的に起きた現象としては、削除対象フォルダを指定して実行したところ、batファイルと同じデスクトップにあったフォルダの中身が部分的に消えました。
ここで不可解なのが、Dドライブにあるフォルダを指定したにも関わらずCドライブのファイルが消えてしまった点と、デスクトップにあったファイルが部分的に消えている点です。
前者は何らかのエラーにより削除先指定フォルダが、batファイルの置いてあるデスクトップ基準になってしまったことではないかと推測できるのですが、2つ目の、ファイルが全てではなく部分的に消えているのいうのが不思議です。
そもそもの削除対象にしていたフォルダ内にあったデータは全て.mp4形式のビデオなのですが、デスクトップから消えたものは.exeからその構成ファイル(ポータブル版ソフト)やエクスポートしたデータ全てとbatファイル自体、一部のショートカットなどで、.mp4形式の動画は残っているものもあれば消えているものもありました。それらが入っていたフォルダ自体は残ったままです。