社内SEの徒然なる日記

PowerShellでファイル削除(読取専用)

■ Remove-Item

Remove-Itemコマンドレットでファイル(正確にはフォルダ)を削除しようとしたのですが、何故かエラーになります。

Remove-Item 'Z:¥backup¥20150721_093150' -Recurse

Remove-Item : 項目 Z:¥backup¥20150721_093150¥format を削除できません: 操作を実行するた
めに十分なアクセス許可がありません。
発生場所 D:¥Backup.ps1:113 文字:24
+ Remove-Item <<<< 'Z:¥backup¥20150721_093150' -Recurse # -
Recurseをオプションを付加して、子要素も纏めて削除
+ CategoryInfo : PermissionDenied: (format:FileInfo) [Remove-Item
]、IOException
+ FullyQualifiedErrorId : RemoveFileSystemItemUnAuthorizedAccess,Microsoft
.PowerShell.Commands.RemoveItemCommand


アクセス許可が無いというから、アクセス権の設定に問題でもあるかと思ったのですが、PowerShellを実行したのと同じユーザーで、手動で削除すると特に問題なく削除できます。

■ 読取専用

よくよく調べると、原因はコレだったようです。
PowerShellでファイル削除(読取専用)

指定したフォルダ配下の全データを削除したかったので -Recurse オプションを付けていたのですが、どうやら中に属性が読み取り専用になっているファイルがあったようなのです。そして、Remove-Itemコマンドレットって標準だと読み取り専用ファイルは削除してくれないみたいです。

読み取り専用のファイルを削除する場合は、-Force ってオプションを付ければ良いようです。
Remove-Item 'Z:¥backup¥20150721_093150' -Recurse -Force


■ 後書き

随分前に、PowerShellでファイルを操作する方法を書いた記事(powerShellでファイル操作をしてみた)を投稿したのですが、これが抜けてましたね。

これ、-Recurse オプション(子要素も削除する)もそうなのですが、手動で削除した時の同じ動作を標準として、それとは別の動作をさせたい場合にオプションを付けるって方が分かりやすいと思うんですけどね。

そして、今回の記事を書くために過去の投稿履歴を調べていると、こんな記事(PowerShellで再帰的なファイル削除の検証)が出てきました。

・・・って、同じこと調べてるじゃん!

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end --- スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する