WindowsでN日より古いファイルを自動的に削除する方法

Windows 10には、 %temp%ディレクトリとDownloadsフォルダー内の古いファイルを削除してスペースを解放する機能が組み込まれています。 Windows 10の設定には、アプリが使用していない一時ファイル、過去x日間に変更されていないダウンロード内のファイル、またはごみ箱にあるx日間のファイルを自動的に消去するオプション(「ストレージ」)があります。

また、ディスククリーンアップツールは、過去7日間アクセスされていない%temp%ディレクトリ内のファイルを消去します。

ただし、ディスククリーンアップとストレージの設定は、 %temp%フォルダーとDownloadsフォルダーのみを対象としています。 Documentsフォルダーなどの「カスタム」フォルダーの場所にある特定の日数より古いファイルを削除するには、次の3つの方法のいずれかを使用する必要があります。

WindowsでN日より古いファイルを自動削除する方法

以下のいくつかの方法では、必要に応じて、ファイルの「作成日」または「変更日」のプロパティをベースラインとして使用して、「古い」ファイルを決定できます。

方法1.ファイルエクスプローラーを使用して 'N'日より古いファイルを削除する

Windowsサーチを使用すると、選択した日付範囲に基づくファイルのリスト、または特定の日付より古いファイルのリストを簡単に取得できます。

  1. 古いファイルを削除するフォルダを開きます。
  2. 検索ボックスをクリックするか、キーボードのF3ボタンを押します。
  3. [変更日]ボタンをクリックし、ドロップダウンオプションの1つを選択します(「先週」など)。

  4. Windows Searchは結果を即座にフィルタリングします。 削除するファイルを選択し、キーボードのDeleteキーを押します。

重要:デフォルトでは、Windows検索は現在のフォルダーとすべてのサブフォルダーでファイルを検索します。 検索を現在のフォルダーのみに制限するには、検索ツールバー/リボンの[現在のフォルダー]ボタンをクリックします。

$config[ads_text6] not found

高度な検索クエリ:「日付」演算子

事前設定された日付範囲オプションが適切でない場合は、カスタム検索クエリを入力できます。 検索ボックスに次のように入力して、カスタムの日付範囲からファイルをフィルタリングします。

 datemodified:1/1/2017 .. 12/31/2017 

これは、指定された日付範囲の間に変更されたファイルを見つけます。 datecreated: dateaccessed:またはdate:特にカメラ画像の場合)演算子を使用することもできます。 なお、 date:オペレーターは、カメラで記録された日付メタデータ(EXIF)を使用します。

関連: Windowsで2つの日付の間に作成されたファイルを検索する方法

2017年11月1日以降に変更されていないファイルを検索するには、以下のように、 datemodifed:演算子でdatemodifed:記号( < )を使用します。

 datemodified:<11/1/2017 

リストからファイルを選択して削除します。

ヒント:日付範囲を手動で入力する代わりに、検索ボックスにdatemodified:またはdatecreated:またはdateaccessed:またはdate:演算子を入力すると、ファイルエクスプローラーに日付ピッカーが表示されます。 次に、ポップアップから日付または日付範囲を選択できます。 日付範囲を指定するには、最初の日付を選択し、カーソルを適切なフィールドにドラッグします。

毎回検索クエリを実行するのではなく、古いファイルを自動的に削除する場合は、バッチファイルまたはPowerShellを作成する必要があります。


方法2:コマンドプロンプトを使用して 'N'日より古いファイルを削除する

ForFilesコンソールツール(Windows 7、Windows 8、Windows 8.1およびWindows 10の場合)は、ファイルまたはファイルセットを選択し、そのファイルまたはファイルセットに対してコマンドを実行します。

 Forfilesヘルプ-コマンドラインスイッチ/ P-検索を開始するパスを示します。 デフォルトのフォルダは現在の作業ディレクトリ(。)です。 / S-forfilesにサブディレクトリに再帰するように指示します。 「DIR / S」のように。 / D-最終更新日を持つファイルを選択します。 たとえば、-365は1年以上前を意味し、-30は1か月前を意味します。 / C "コマンド"-各ファイルに対して実行するコマンドを示します。 コマンド文字列は二重引用符で囲む必要があります。 デフォルトのコマンドは「cmd / c echo @file」です。 コマンド文字列では次の変数を使用できます。@file-ファイルの名前を返します。 @fname-拡張子なしでファイル名を返します。 @ext-ファイルの拡張子のみを返します。 @path-ファイルの完全パスを返します。 @relpath-ファイルの相対パスを返します。 @isdir-ファイルタイプがディレクトリの場合は「TRUE」を返し、ファイルの場合は「FALSE」を返します。 @fsize-ファイルのサイズをバイト単位で返します。 @fdate-ファイルの最終更新日を返します。 @ftime-ファイルの最終変更時刻を返します。 

このツールでサポートされているコマンドライン引数の一覧全体を表示するには、「 FORFILES /? コマンドプロンプトで。

ForFilesを使用して特定の日数より古いファイルを見つけて削除するには、コマンドプロンプトウィンドウを開き、次のいずれかのコマンドを入力します。

 ForFiles / p "D:\ My Scripts" / s / d -30 / c "cmd / c del @path" 

-または-

 ForFiles / p "D:\ My Scripts" / s / d -30 / c "cmd / c del @file" 

上記は、フォルダーパスがD:\My Scriptsあり、30日より古いファイルを削除することを想定しています。 必要に応じて、フォルダパスと日数をカスタマイズします。

コマンドが成功した場合、出力メッセージは表示されません。 指定した条件に一致するファイルがない場合は、「 エラー:指定した検索条件でファイルが見つかりません 」というメッセージが表示されます

追加のヒント:ファイルを削除する前に予行演習を行い、指定された基準で影響を受けるファイルを確認するには、次のようにコマンドdelecho置き換えます。

 ForFiles / p "D:\ My Scripts" / s / d -30 / c "cmd / c echo @path" 

-または-

 ForFiles / p "D:\ My Scripts" / s / d -30 / c "cmd / c echo @file" 

オプションで、上記のコマンドを使用してバッチファイルを作成できます。 または、タスクスケジューラを使用して、指定した間隔でコマンドを自動的に実行します。

タスクスケジューラを使用してコマンドを自動的に実行する

  1. タスクスケジューラを起動します。
  2. タスクスケジューラで、[タスクスケジューラライブラリ]をクリックします。
  3. 右ペインの「タスクの作成」リンクをクリックします。
  4. 「タスクの作成」ダイアログで、「一般」タブを選択します。
  5. タスクの名前を挙げ、「マイドキュメントの古いファイルを削除して」と言います。
  6. 「トリガー」タブをクリックし、「新規」をクリックします。
  7. [タスクの開始]ドロップダウンリストボックスのドロップダウンリストから[スケジュールどおり]を選択します。
  8. タスクを毎日、毎週、または毎月実行するように選択できます。 毎週を選択する場合は、タスクをトリガーする曜日を選択します。
  9. 完了したら、[OK]ボタンをクリックします。
  10. 「アクション」タブをクリックし、「新規...」ボタンをクリックします。
  11. 「新しいアクション」ウィンドウで、以下を入力します。
     アクション:プログラムを起動しますプログラム/スクリプト:C:\ Windows \ System32 \ ForFiles.exe引数を追加します(オプション):/ p "%userprofile%\ Documents" / s / d -30 / c "cmd / c del @file" 

  12. OKをクリックします。

新しいタスクが作成され、実行すると、過去30日間に変更されていないDocumentsフォルダー内のファイルが削除されます。


方法3:スクリプトを使用してN日より古いファイルを削除する

Spiceworksフォーラムのユーザーは、指定されたフォルダーパス上のN日より古いファイルを再帰的に削除できるVBScriptを持っています。 簡単なスクリプトは次のとおりです。

 エラー時に再開次のセットoFileSys = WScript.CreateObject( "Scripting.FileSystemObject")sRoot = "C:\ Path To Old Files" '今日のファイルを探すパスルート=日付nMaxFileAge = 3'これより古いファイル(日数)削除されますDeleteFiles(sRoot)関数DeleteFiles(ByVal sFolder)Set oFolder = oFileSys.GetFolder(sFolder)Set aFiles = oFolder.Files Set aSubFolders = oFolder.SubFolders for aFiles内の各ファイルdFileCreated = FormatDateTime(file.DateCreated、 "2" )If DateDiff( "d"、dFileCreated、today)> nMaxFileAge Then file.Delete(True)End If Next For Each Folder in each Folder DeleteFiles(folder.Path)Next End Function 

ソース:古いファイルと空のサブフォルダーを削除する–スクリプトセンター– Spiceworks

重要! 上記のスクリプトでは、「最終更新日」ではなく、アイテムの「作成日」プロパティが考慮されます。 過去N日間に変更さていないファイルを削除する場合は、スクリプトの次の行を変更します。

 dFileCreated = FormatDateTime(file.DateCreated、 "2") 

 dFileCreated = FormatDateTime(file.DateLastModified、 "2") 

3日より古いファイルをクリアします。 必要なのは、スクリプトで必要に応じてフォルダーパスと最大ファイル保存.vbsパラメーターを変更し、 .vbs拡張子を付けて保存して実行することだけです。 スクリプトは指定されたフォルダーとサブフォルダーで再帰的に機能することに注意してください。

N日より古いファイルを削除し、空のサブフォルダーを再帰的に自動的にクリアする別のスクリプトを次に示します。 最大経過日数(日数)より古いファイルの削除–スクリプトセンター– Spiceworksを参照してください。

関連: Windowsで空のフォルダーをすばやく検索して削除する方法


方法4:PowerShellを使用して 'n'日より古いファイルを削除する

3番目のオプションはPowerShellを使用することです。これには、古いファイルを見つけて削除するための便利なコマンドレットがあります。

PowerShell( powershell.exe)起動し、次のコマンドを入力します。

 Get-ChildItem -Path [folder_path] -File -Recurse -Force | Where-Object {($ _。LastWriteTime -lt(Get-Date).AddDays(-30))} | アイテムの削除-力 

例:

 Get-ChildItem -Path "D:\ Reports" -File -Recurse -Force | Where-Object {($ _。LastWriteTime -lt(Get-Date).AddDays(-30))} | アイテムの削除-力 

%userprofile%\documentsなどの環境変数を含むパスを使用するには、次の構文を使用します。

$config[ads_text6] not found
 Get-ChildItem -Path "$ env:userprofile \ documents" -File -Recurse -Force | Where-Object {($ _。LastWriteTime -lt(Get-Date).AddDays(-30))} | アイテムの削除-力 

(注:この例のフォルダー名は、ユーザープロファイルのDocumentsフォルダーです。必要に応じて、フォルダー名とパスを適宜変更してください。)

-Fileパラメーターを使用したため、ファイルに対してのみ機能します。 そのため、過去n日間に書き込まれていないサブフォルダーは削除されません。

上記のコマンドには3つの部分があります。

  1. Get-ChildItemコマンドレットは、Documentsフォルダー内のファイルのリストを取得します。
  2. 次に、出力がWhere-Objectコマンドレットにパイプされ、フィルタリングが行われ、過去x日間(この例では30 days )に変更されていないファイルのみが選択されます。
  3. 最後に、出力をRemove-Itemコマンドレットにパイプ処理します。これにより、前の2つのコマンドレットによって返された古いファイルが削除されます。

ヒント1:一致するファイルを一覧表示し、削除しないでください。

一致するファイルとフォルダーを削除せずに一覧表示するには、 | Remove-Itemドロップします| Remove-Item | Remove-Itemスイッチ。

 Get-ChildItem -Path [folder_path] -File -Recurse -Force | Where-Object {($ _。LastWriteTime -lt(Get-Date).AddDays(-30))} 

ヒント2:アイテムを削除するときのエラーを抑制する

エラーメッセージ(アイテムへのアクセスまたは削除時)がコンソールに表示されないようにするには、 -ErrorAction SilentlyContinueパラメーターを追加します。

 Get-ChildItem -Path [folder_path] -File -Recurse -Force | Where-Object {($ _。LastWriteTime -lt(Get-Date).AddDays(-30))} | Remove-Item -ErrorAction SilentlyContinue -Force 

古いファイルとフォルダを削除します

上記のコマンドは古いファイルのみを削除し、過去x日間書き込まれていないサブフォルダーは削除しないことに注意してください。 古いフォルダを削除するには、前述のコマンドから-File引数をドロップします。

例:

 Get-ChildItem -Path "$ env:userprofile \ documents" -Recurse -Force | Where-Object {($ _。LastWriteTime -lt(Get-Date).AddDays(-30))} | アイテムの削除-力 

(参照: MicrosoftサイトのGet-ChildItemコマンドレットのドキュメント)

重要: -Recurseパラメーターは、ファイルを再帰的に(サブディレクトリに)取得するようにPowerShellに指示します。 サブフォルダー内のファイルを検索しないようにするには、 -Recurseオプションを削除して、現在のフォルダーのみが処理されるようにします。

関連記事