PowerShellでN日前または指定日(前後)に作成(または変更)したファイルを削除する

3305 ワード

バッチで処理しようと思っていたのですが、時間を考えるのが面倒でした・・・
すぐにPowerShellをインストールしてヘルプドキュメントを見てください.例があります.
次のコマンドは、Program Filesフォルダの最終変更日が2005年10月1日より遅く、1 MB未満または10 MB未満のすべての実行可能ファイルを検索します(テストでは実行できません--!):
Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *.exe | Where-Object ` -FilterScript {($_.LastWriteTime -gt "2005-10-01") -and ($_.Length -ge 1m) ` -and ($_.Length -le 10m)}
以下に変更しましたが、D:testおよびサブディレクトリから10日前に作成したファイルを削除する例として、テストは慎重にしてください!内容が長すぎて複数行に表示されるので、実は1行です.「`」文字を継続記号として使用します(二重引用符のうち、重音符は単一引用符ではありません)、vbsの「」に相当します.Windows PowerShellの次の行は継続部分であり、行全体が改行しないとライブラリに置けない場合に役立ちます.エクスプレッションをパイプの最初の要素としてのみ使用できます.
1行のコマンドで期限切れのファイルリストを取得する:Get-ChildItem-Path D:test-Recurse-ErrorAction:SilentlyContinue|`Where-Object-FilterScript{(((get-date)-($.CReationTime)).days-gt 10`-and$.PsISContainer-ne$True)}|Select-Object FullName
1行のコマンドで期限切れのファイルを削除する:Get-ChildItem-Path D:test-Recurse-ErrorAction:SilentlyContinue|`Where-object-FilterScript{(((get-date)-($.CReationTime)).days-gt 10`-and$.PsISContainer-ne$True)}|Remove-item
1行のコマンドで期限切れのファイルを削除する(読み取り専用、非表示を含む):Get-ChildItem-Path D:test-Force-Recurse-ErrorAction:SilentlyContinue|`Where-Object-FilterScript{(((get-date)-($.CReationTime)).days-gt 10`-and$.PsISContainer-ne$True)}|Remove-item-Forceもちろん、別名でコマンドを簡単に書くことができます.
または、まずTypes.ps 1 xmlファイルでSystem.IO.FileInfoを見つけ、Ageメンバーを追加します.
System.IO.FileInfo                      Age                          ((get-date) - ($this.creationtime)).days                     
追加された内容は、変更後、追加する必要はありません.
スクリプトの内容:

ForEach ($file in Get-ChildItem D:\test\* -Force -Recurse `
-ErrorAction:SilentlyContinue)
  {
    if (($file).Age -ge 10 -and $file.PsISContainer -ne $True)
      {$file.Delete()}
  }

ここでは{Remove-item-Force'$file'}は使用できません.
スクリプト拡張子は.ps 1、拡張子は数字1です.
-gtはより大きく、-geはより大きいか等しいか、その他は助けを見てください.
PSIsContainerプロパティが真の場合、ファイルではなくフォルダが処理されることを意味します.
-Firceは読み取り専用、非表示などのシステムファイルを含み、それを使用した後は-ErrorActionを使用することが望ましい.
-ErrorAction:SilentlyContinueは、再帰時にSystem Volume Informationなどのアクセス権限のないディレクトリでエラーが発生するなど、エラーを表示せずにスクリプトを実行し続ける役割を果たします.
指定した日付より前に作成されたファイルを検索します.

Get-ChildItem -Path D:\test -Force -Recurse -ErrorAction:SilentlyContinue | `
Where-Object -FilterScript {($_.CreationTime -gt "2011-01-01") -and `
($_.PsISContainer -ne $True)} | Select-Object FullName

指定した日付までに変更されたファイルを検索するには、次の手順に従います.

Get-ChildItem -Path D:\test -Force -Recurse -ErrorAction:SilentlyContinue | `
Where-Object -FilterScript {($_.LastWriteTime -gt "2011-01-01") -and `
($_.PsISContainer -ne $True)} | Select-Object FullName

削除する場合は、Select-Object FullNameをRemove-Item-Forceに変更します.
日付をバッチで指定するのは便利ですが、N日前の古いファイルを削除するのは面倒です.次の例では、指定した日付で変更したファイルをbatで削除します.ファイル作成時間はdir/tcのみ表示され、デフォルトdirはdir/twです.
送信者:nwn(Lie)、送信エリア:DOSマーク  标题:Re:(forコマンド)ある期間に作成したファイルを一括削除しますか?発信局:水木コミュニティー(Sat Jun)  7 08:39:39 2008)、構内

@echo off
cd /d     
for %%f in (*) do if "%%~tf" gtr "2008-04-01" del "%%f"

サブディレクトリを含める場合はfor/r.%%f in...を使用します.
【justzhou(玉樹臨風)の大作では】:例えば、あるディレクトリの下で2008-04-01以降に作成されたすべてのファイルを削除します.