none
パスに特殊な文字を含む場合のファイル削除について

    質問

  • 以下コマンドをバッチファイルから実行して、ファイル作成日が1週間以上経過したファイルを削除する運用を実施しております。

    powershell -NoProfile -ExecutionPolicy Unrestricted -Command "& { Get-Childitem "削除対象フォルダを指定" -file -recurse | Where-Object {$_.CreationTime -lt (get-date).adddays(-7)} | Remove-Item }"

    基本的には、上記で想定通りに処理されるのですが、パスに「!」や「→」が含まれるファイルが削除されません。
    Get-Childitemのみで表示する場合は、上記特殊文字を含むパスのファイルも正常に表示されますが、Where-Objectへ$_で渡される箇所で上手く処理出来ていない様に見えます。
    回避策をご存じであれば、教えてください。

    よろしくお願い致します。
    2018年1月26日 6:50

回答

  • あ、ファイルの「作成日」と「更新日」を見間違っているだけでした。。。

    たまたま「!」などを含むパスに存在するファイル群が、作成日より更新日の方が古い日付であったため、更新日を見て削除されるはずと思い込んでいました。

    お騒がせしてすみません。


    • 回答としてマーク namaroi 2018年1月26日 7:57
    2018年1月26日 7:56

すべての返信

  • バッチファイルから実行とのことですが、 PowerShell -Command の引数全体を "" で括っている中で更に "削除対象フォルダを指定" でもう1回 "" で括られていますが、これは正しいでしょうか?

    また質問文の『パスに「!」や「→」が含まれる』とは "削除対象フォルダを指定" の部分のことでしょうか? それともGet-ChildItemが返すパスのことでしょうか? 後者であれば手元の環境では問題なく削除できましたが…。

    まさかRead-Only(読み取り専用)属性のために削除されなかったということはありませんよね? その場合は -Force パラメーターで強制的に削除できます。

    • 回答の候補に設定 佐祐理 2018年1月26日 8:35
    2018年1月26日 7:19
  • 返信ありがとうございます。

    削除対象フォルダの"については、特に有り無しで挙動に変化はありませんでした。

    また、「!」や「→」が含まれるのは、Get-ChileItemに指定しているフォルダの配下にあるサブフォルダとなります。

    読取り専用など、権限周りは確認済みですので問題はない状況となります。

    環境を記載していませんでしたが、Windows Server 2012 R2の環境となります。

    2018年1月26日 7:40
  • あ、ファイルの「作成日」と「更新日」を見間違っているだけでした。。。

    たまたま「!」などを含むパスに存在するファイル群が、作成日より更新日の方が古い日付であったため、更新日を見て削除されるはずと思い込んでいました。

    お騒がせしてすみません。


    • 回答としてマーク namaroi 2018年1月26日 7:57
    2018年1月26日 7:56