2022年11月05日

大量のフォルダの削除を自動化


ちょうど一年前(2021年)に、C:\Windows\system32\config\systemprofile\appdata\local のディレクトリに大量のtmpフォルダが保存されているという記事をみつけ、私の場合はどうかなと確認したら、記事の通り10,000に近い数のtmpフォルダが存在した。

ネットの記事を参考に、削除しても問題ないを信じて全てを削除して一年経過したが不具合は発生していない。(自身の責任・判断で)

その後どうなっているか確認すると、同じディレクトリに11,016個の「tw-*.tmp」フォルダが確認された。1年間で11,000個作られている。Windowsの使い方などにより作成される頻度は違うのだろうか。

調べると、この「tw-*.tmp」の作成を阻止する方法を記載しているサイトもある。

「タスクスケジューラ」→「Windows」→「Management」→「Provisioning」の「LOGON」を右クリックで「無効」に設定するらしい。そうすると、この事象の発生状況も確認できなくなるようなので、これまでのように削除する方法を採る事にする。

しかしバッチで作成して思い出した時に走らせるのでは、削除時間が思っているよりも長時間かかるので、何かのついでに自動化することにする。

月に4~6回実行するPowerShellがあるので、その中で走らせる構想で作成する。

PowerShellについては初心者なので、ネットで調べては、動きを確認しながら、修正しながらコーディングする。


$changefolder = "C:\windows\system32\config\systemprofile\appdata\local"

# ディレクトリ名を設定

write $changefolder

# 変更するディレクトリ名を確認

cd C:\windows\system32\config\systemprofile\appdata\local

# 作業するディレクトリを変更

$filecount = (get-childitem tw-*.tmp | ? psiscontainer).count

# そのディレクトリにある「tw-*.tmp」フォルダの数を取得

if ($filecount -eq 0) {write zero}

# フォルダ数が0であれば、そのまま終了

else {write $filecount
remove-item tw-*.tmp}

# フォルダ数が0以外であれば該当名のフォルダを削除

$host.UI.RawUI.ReadKey()

# 作業結果を確認するのにPauseさせる


コーディング最中にも、該当ディレクトリの中に該当するフォルダは削除した後だったので、削除するフォルダ名に似たフォルダを作成しておいて、削除できるのかを確認しながらテストした。

このコーディングを先程のPowerShellファイルに組み込めば、月に数回は削除するタイミングが発生するので、年間11,000個も残ることは無いだろう。

https://www.ktservices3.com/

投稿者 owner : 2022年11月05日