ForFiles を使用してタスク スケジューラでファイルを削除する

ForFiles を使用してタスク スケジューラでファイルを削除する

タスク スケジューラを使用して、夜間にすべてのフォルダーとファイルを削除しようとしています。アクションでは次のコマンドを使用しています。

プログラム/スクリプト:forfiles
引数:/S /P C:\Users\david\AppData\Roaming\Apple Computer\MobileSync\Backup /C "cmd /c if @isdir==TRUE rd /s /q @file"

これはファイルやフォルダを削除するものではありません。この例では何が欠けているのでしょうか?

これは動作するように見えますが、エラーが発生します: /S /P "C:\Users\Sales\AppData\Roaming\Apple Computer\MobileSync\Backup" /C "cmd /c rd /s /q @file

エラー:

C:\Users\david>forfiles /S /P "C:\Users\david\AppData\Roaming\Apple Computer\MobileSync\Backup"  /C "cmd /c rd /s /q @file

ERROR: The system cannot find the file specified.

C:\Users\david>

答え1

「rd /s /q」ですべてを上書きするつもりなのに、なぜサブディレクトリを検索するのですか?

あなたがかもしれない(おそらく)これを見ているでしょう:

  1. ファイル用作業するファイルのリストを作成します: たとえば... "C:\これ" そして "C:\これ\あれ
  2. C:\これ「あなたに渡される
  3. C:\これ「再帰的に
  4. C:\これ\あれ「あなたに渡されました。」
  5. 存在しないため、削除するとエラーが発生します。

他にも起こり得る状況が1つあります。ツリーを列挙しているときにファイルハンドルが開いている可能性があるので、"C:\これ"、"C:\これ\あれ「はforfilesによって開いたままロックされています。forfilesがこれを回避するように書かれているかどうかはわかりませんが、確かにプログラミング中にこれに遭遇します。

提案: /Sを削除してくださいファイル用(ベスト) または、「blah blah blah..」を追加します。@ファイルが存在する場合「blah blah blah (最高じゃない)」

関連情報