web-dev-qa-db-ja.com

「より古いファイルを削除する」バッチスクリプト

したがって、バックアップを実行する作業で、指定したディレクトリ内の、たとえば3日間より古いファイルを削除できるバッチスクリプトが必要です。このスクリプトは、毎日指定された時刻に実行されるようにスケジュールされたタスクとして設定されます。

8
Chiggins

Powershellが許容できる場合(サーバー2008以降ではデフォルトで有効になっているはずです)、これを試してください:

$numberOfDays = 3
$Now = Get-Date
$TargetFolder = “C:\myoldfiles”
$LastWrite = $Now.AddDays(-$numberOfDays)
$Files = get-childitem $TargetFolder -include *.bak, *.x86 -recurse | Where {$_.LastWriteTime -le “$LastWrite”} 

foreach ($File in $Files)
{
    write-Host “Deleting File $File” -foregroundcolor “Red”;
    Remove-Item $File | out-null
} 

ソース ここ

8
Nate
forfiles -p c:\ pathtofiles\-m * .rar -d -5 -c "cmd/c del @path"

ここで、-5は、削除するファイルの保存期間(この場合は5日以上)です。このスクリプトは.rarファイルを削除しています-ファイルタイプを削除する場合は-m *.rarを削除してください。

13
Mark Henderson

バッチファイルを使用する場合は、Robocopy.exeが最適です。その高速(マルチスレッド)で非常に堅牢です。シナリオでは、以下をガイドとして使用できます。

:: Moves dir & files older than 3 days to i:\Destination
:: Wildcards acceptable
robocopy i:\Source\ i:\Destination\ /MOVE /MIR /MINAGE:3 /ETA
:: Removes the destination tree
rd /s /q i:\destination

オプションの長いリストがあります。robocopy/?を実行してください。それらすべてを見るために。増分バックアップ、スケジューリング、バックアッププロファイルの作成などにも使用できます。

3
Dharma Leonardi

Horst SchaefferのDelAge32をご覧ください。

http://home.mnet-online.de/horst.muc/wbat32.htm#top

DelAge32 - ver. 2.3 (c) 2003-2008, Horst Schaeffer
Deletes or moves files (path with file pattern) by age (number of days)
Syntax:  DelAge32 filespec age [options]
Options:
  /created /accessed /modified (default) - file stamp used to evaluate age
  /includeRO - include read-only files
  /includeH  - include hidden files
  /includeS  - include system files
  /includeRHS -include read-only, hidden and system files
  /recurse   - include subdirectories
  /subonly   - /recurse excluding initial directory
  /rd        - remove empty subdirectories
  /move path - move files to specified path
  /preview   - list, but no action
  /quiet     - no output

コマンドは次のように簡単にすることができます。

delage32.exe c:\logdirectory\*.log 3

このコマンドをスケジュールされたタスクとして実行しています。

2
RobW

これには DelEn.exe を使用します。

Delen-DELete ENhanced-は、DELのスープバージョンです。拡張ワイルドカードと親ディレクトリ、日付、時刻、サイズのフィルタをサポートしています。ファイルは削除から除外できます。

2
jftuga

これはリモートコンピュータでは機能しません。管理者は複数のコンピュータを管理する必要があります。以下は、複数のリモートコンピュータのフォルダにログインせずにそれらを削除するために使用できるスクリプトです。

以下のスクリプトは、15日より古いフォルダーを削除します。 $ daysパラメータを変更することもできます。

D $\Program Files(x86)\ Research In Motion\BlackBerry Enterprise Server\Logsは、Blackberry LogフォルダーのUNCパスです。ログ/フォルダがあるディレクトリを変更できます。

Servers.txtファイルにすべてのサーバー名をリストします。このスクリプトと同じディレクトリに配置する必要があります。

cd C:\Scripts\Powershellscripts\deletefiles ----> change it to the directory you wanna out this script to

$Days = "15" 
$Now = Get-Date
$LastWrite = $Now.AddDays(-$days)
$server = get-content servers.txt
foreach ($node in $server)
{
get-childitem -recurse "\\$node\D$\Program Files (x86)\Research In Motion\BlackBerry Enterprise Server\Logs" | Where-Object {$_.LastWriteTime -le $LastWrite} | remove-item -recurse -force
}

スクリプトを.ps1として保存して実行します。バッチファイルでスケジュールできます。この方法では、スクリプトの最初にChange Directoryコマンドを追加する必要があります。

楽しんで。

1
VJ Kumar

これは私があなたがしたいことをするために書いたPowershellスクリプトです-それはもう少しします。ログやその他の一時ファイルをクリアするために使用します。

purge-dem-logs.cmd

powershell.exe -command "& 'c:\purgelogs\purgelogs.ps1' -Filepath D:\SQL\backup\ -filemask *.bak -Maxdays 14 "

purgelogs.ps1:

Param ($filepath, $filemask, $maxdays, [switch]$recurse)

   if (($FilePath -eq $null) -or ($FileMask -eq $null) -or ($MaxDays -eq $null)) {
      write-Host "Usage .\purgelogs.ps1 -filepath [Path] -filemask [Mask] -masdays [Max Days]"
      write-Host " "
      write-Host "Example: "
      write-Host "    .\purgelogs.ps1 -filepath c:\temp -filemask *.log -maxdays 30"
      break
      }

   if (Test-Path $FilePath) {

      $FilePath += "*"

      $Now = Get-Date

      $LastWrite = $Now.AddDays(-$MaxDays)

      write-Host "Last write time " $LastWrite
      if ($recurse) {
         $Files = get-childitem $FilePath -include $FileMask -recurse | Where {$_.LastWriteTime -le "$LastWrite"}
      } else {
         $Files = get-childitem $FilePath -include $FileMask | Where {$_.LastWriteTime -le "$LastWrite"}
      }

      if ($Files -eq $null) {

         write-Host "No matching files found"

      } else {

          foreach ($File in $Files)
            #You can add -whatif to see the consequence û Remove-item $File -Whatif
            {
            write-Host "Deleting File $File" -foregroundcolor "Red"; Remove-Item $File | out-null
            }
         }
      }
   Else
      {
      Write-Host "The Folder $FilePath Does Not Exist!"
      }
1
Ian Murphy

代替アプローチとして:ファイルシステムにクエリを実行してファイル作成時間を取得する(および同じファイルを期限切れになるまで数日かけてヒットする)代わりに、作成時にファイルを独自のインデックスに追加できます。インデックスは、作成日にちなんで名前が付けられ、既知の場所に1行に1ファイルずつ保存されたファイルと同じくらい単純なものになる可能性があります。

ファイルを作成するマルチスレッド/マルチプロセスアプリがある場合、インデックスをより洗練された方法で処理する必要があります。

利点は、特定の日に作成された比較的単純に処理されたファイルのリストが常にあり、詳細についてファイルシステムに何度も尋ねる必要がないことです。

(これはアプリとファイルの作成に依存し、サードパーティではなくあなたが管理します)。

0
Tim Barrass