9
13

More than 3 years have passed since last update.

Powershell でフォルダーを強制削除する

Last updated at Posted at 2020-04-28

PC を新調し、以前までシステムドライブとして使っていた SSD を新しい PC のデータ置き場として換装しました。アプリフォルダーやシステムフォルダーはもう不要なので、エクスプローラーから削除しようとしましたが、権限の都合で拒否されます。

頻繁に遭遇したのは、 「このフォルダーを変更するには、TrustedInstaller からアクセス許可を得る必要があります」 というエラー。
access_denied.png

これを黙らせるには、フォルダーの所有者変更と権限付与が必要です。エクスプローラー上からもできますが、削除したいフォルダが多くていちいちクリックが面倒だったので、再利用性の高い PowerShell で実行することにしました。

以下、その手順です。

手順

PowerShell を起動

以下のいずれかの方法で PowerShell を 管理者権限で 起動します。

  • Windows ボタンを右クリック → "Windows PowerShell(管理者)" をクリック
  • Windows キー → Power と入力 → PowerShell がサジェストされるので "管理者として実行" をクリック

PowerShell を実行中のユーザーを確認

whoami コマンドにより、実行中ユーザーのデバイス名とユーザー名が表示されます。後で使うのでメモっておきましょう。

PS C:\> whoami
my-pc\kei

上の実行例では、デバイス名は my-pc, ユーザー名は kei です。

フォルダーの所有者変更、権限付与、削除

使うコマンドは以下の3つです。

# 所有者変更 (Linux の chown に相当)
#  /r はサブフォルダーを含めて再帰的に処理
takeown /s <デバイス名> /u <ユーザー名> /f <削除パス> /r


# 権限変更 (chmod に相当) 
#   :F は指定ユーザーにフルコントロール権限を与えるフラグ
#   /T はサブフォルダーを含めて再帰的に処理
icacls <削除パス> /grant <ユーザー名>:F /T


# 削除 (rm -rf) に相当
Remove-Item <削除パス> -Recurse -Force

これを踏まえて、 E:\Program Files (x86) を削除するコマンドは以下のようになります。今回は削除対象のパスがスペースを含んでいるので、ダブルクォーテーションで囲っています。

takeown /s my-pc /u kei /f "E:\Program Files (x86)\*.*" /r
icacls "E:\Program Files (x86)\*.*" /grant kei:F /T
Remove-Item "E:\Program Files (x86)\" -Recurse -Force

参考

9
13
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
9
13