0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Windows] 超簡単 誤って作成した数十万のフォルダ、ファイルが削除できないときに使える削除コマンド

Posted at

経緯

フォルダを監視し、変更を検知すると指定フォルダへと自動バックアップするアプリケーションのテストの際、誤って監視フォルダ内にバックアップ先フォルダを作ってしまいました。

監視フォルダ/
│── バックアップ先フォルダ

その結果、ファイル変更検知とバックアップが無限に起き、一瞬で数十万の(それ以上かも!?)フォルダとファイルが生成されました。

数が多すぎるせいか何度削除しても消えてくれないゾンビにくらわす武器がありました!

PowerShellで削除

PowerShellで実行
Remove-Item -Path "削除したいアイテム群があるフォルダのパス" -Recurse -Force

めでたしめでたし

。。。fin


ちょっと待ってください、些細なことでも一手間加えたいというのがエンジニアの性ですよね。

削除アプリケーションを作る

問題点

  • コマンドの手打ち
  • 処理中の内容が表示されず、固まっているように見える

特に二番目は何とかしたいです。
私はフロントエンドエンジニアなので、サービス離脱を招く問題は見過ごせません。

構成
フォルダ/
│── 削除したいアイテム群
│── delete_file.bat

delete_file.batを実行して削除できるようにしましょう。
更に、現在削除中のアイテムを表示してユーザーに安心感を与えます。

メモ帳で作成したあと、UTF-8 (BOM 付き) で保存してください。

delete_file.bat
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

:: delete_file.batがあるフォルダを取得
set "TARGET_DIR=%~dp0"

:: delete_file.batの名前を取得
set "SCRIPT_NAME=%~nx0"

:: 一時フォルダ(WindowsTempディレクトリ)を作成してdelete_file.batを移動
set "TEMP_DIR=%TEMP%\delete_temp"
mkdir "%TEMP_DIR%"
copy "%TARGET_DIR%%SCRIPT_NAME%" "%TEMP_DIR%\"

:: 削除中のファイル・フォルダをリアルタイム表示
for /f "usebackq delims=" %%A in (`PowerShell -Command "& { [Console]::OutputEncoding = [System.Text.Encoding]::UTF8; Get-ChildItem -Path '%TARGET_DIR%' -Exclude '%SCRIPT_NAME%' -Recurse | Select-Object -ExpandProperty FullName }"`) do (
    echo ■■■削除中: %%A■■■
    PowerShell -Command "Remove-Item -Path '%%A' -Recurse -Force"
)

:: 削除が終わったらdelete_file.batを元の場所に戻す
move "%TEMP_DIR%\%SCRIPT_NAME%" "%TARGET_DIR%"
rmdir "%TEMP_DIR%"

echo ■■■■■■■■■■削除が完了しました。■■■■■■■■■■
pause

これからもファイルを無限に作成するミスを犯し続けようと思います。
ありがとうございました。

おすすめ記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?