【bat】ファイル削除で「アクセスが拒否されました」が出るときの対策

バッチファイルで del コマンドを使ってファイルを削除しようとしたときに「アクセスが拒否されました」というメッセージが出ることがあります。
これはファイルや実行環境に関する制限が原因で、単純に「管理者権限が足りない」だけではない場合もあります。
本記事では、原因別に対策方法をまとめます。

原因1:ファイルを使用中

ファイルが他のプログラムによって開かれている場合、削除できません。特にログファイルやアプリケーションが書き込み中のファイルで発生しやすいエラーです。

@echo off
del "C:\app\log.txt"
rem → アプリが使用中なら「アクセスが拒否されました」と表示

対策: 該当プログラムを終了してから削除するか、再起動後に削除を行います。

原因2:管理者権限不足

C:\WindowsC:\Program Files など保護された領域では、通常のユーザー権限では削除できません。

@echo off
del "C:\Program Files\app\config.ini"

対策: バッチファイルを「管理者として実行」してください。自己昇格処理を入れると便利です。

:: 権限がない場合は管理者で再起動
net session >nul 2>&1 || (
  powershell -Command "Start-Process -FilePath '%~f0' -Verb RunAs"
  exit /b
)

原因3:読み取り専用属性

ファイルに「読み取り専用」属性が付いている場合、削除できません。

@echo off
del "C:\data\sample.txt"
rem → アクセス拒否になる場合あり

対策: attrib -r で読み取り専用属性を外してから削除します。

@echo off
attrib -r "C:\data\sample.txt"
del "C:\data\sample.txt"

原因4:ファイル/フォルダのアクセス許可

NTFSのアクセス制御リスト(ACL)で削除権限が拒否されていると、管理者でも削除できないことがあります。

対策: icacls コマンドで権限を確認し、必要に応じて付与します。

@echo off
icacls "C:\data\sample.txt"
icacls "C:\data\sample.txt" /grant "%USERNAME%":F
del "C:\data\sample.txt"

原因5:システムや特殊ファイル

一部のシステムファイルやロックがかかったファイルは通常の del では削除できません。

対策: セーフモードで起動して削除する、あるいは PowerShell の Remove-Item -Force を利用します。

@echo off
powershell -NoProfile -Command "Remove-Item -LiteralPath 'C:\data\sample.txt' -Force"

まとめ

「アクセスが拒否されました」と出るときは、次の順序で原因を切り分けましょう。

  • ファイルが使用中でないか確認する
  • 管理者権限で実行しているか確認する
  • 読み取り専用属性を外す
  • アクセス許可(ACL)を確認・変更する
  • システム保護対象ファイルならセーフモードや PowerShell を活用する

これらを踏まえて処理を書き換えれば、バッチファイルでのファイル削除を安定して実行できるようになります。