Tập tin xóa tập tin cũ hơn tập lệnh hàng loạt


8

Vì vậy, trong quá trình thực hiện sao lưu, tôi cần một tập lệnh bó cho phép tôi xóa các tệp trong một thư mục được chỉ định, cũ hơn so với cho phép, 3 ngày. Kịch bản này sẽ được đặt thành một tác vụ theo lịch trình để chạy vào một thời điểm được chỉ định mỗi ngày.


Bạn có bị ràng buộc với hàng loạt? Thế còn powershell?
Nate

Powershell sẽ có thể hoạt động, tôi chỉ quen với đợt và tôi chưa bao giờ chơi với Powershell.
Chiggins

Câu trả lời:


8

Nếu powershell có thể chấp nhận (nên, vì nó được bật theo mặc định trên Server 2008+), hãy thử điều này:

$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
} 

Souce đây .


2
+1. Ngoài ra, để kiểm tra, bạn có thể thêm cờ "-whatif" : Remove-Item $File -whatif | out-null. Để chạy như một tác vụ lập lịch, công việc nên chỉ định đường dẫn đầy đủ đến powershell.exe với tập lệnh của bạn có tên là đối số.
AndyN

Tôi đã đưa ra cùng một giải pháp để bắt đầu - nhưng gặp vấn đề với tải bộ nhớ liên quan đến việc đưa tất cả các tệp lên phía trước.
Tim Barrass

13
forfiles -pc: \ pathtofiles \ -m * .rar -d -5 -c "cmd / c del @path"

Trong trường hợp -5là độ tuổi của các tập tin bạn muốn xóa (5 ngày trở lên trong trường hợp này). Tập lệnh này đang xóa .rarcác tệp - bỏ phần -m *.rarnếu bạn muốn xóa bất kỳ loại tệp nào.


1
Trong số tất cả những câu trả lời này, đây là câu duy nhất (cho đến nay) trực tiếp trả lời câu hỏi.
John Gardeniers

3

Nếu bạn khăng khăng sử dụng các tệp bó, Robocopy.exe là câu trả lời của bạn. Nó nhanh (đa luồng) và rất mạnh mẽ. Đối với kịch bản của bạn, bạn có thể sử dụng như sau như một hướng dẫn:

:: 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

Có một danh sách dài các tùy chọn, xin vui lòng làm robocopy /? để xem tất cả Bạn thậm chí có thể sử dụng nó để thực hiện sao lưu gia tăng, lập lịch, tạo hồ sơ sao lưu, v.v.


Tất cả +1 cho bản sao! <3 Lấy lại ví dụ của bạn: Tôi không chắc liệu công tắc / MIR có phù hợp với tình huống này hay không, / MOVE nên quan tâm đến câu hỏi của Chiggins. Một điều chắc chắn, robocopy có rất nhiều lựa chọn, cần phải kiểm tra cẩn thận.
JamesCW

2

Tôi thích sử dụng DelEn.exe cho việc này.

Delen - DELete ENhified - là phiên bản cải tiến của DEL. Nó hỗ trợ các ký tự đại diện mở rộng và thư mục gốc, cũng như các bộ lọc ngày, thời gian và kích thước. Tập tin có thể được loại trừ khỏi xóa.


2

Bạn có thể xem DelAge32 của Horst Schaeff32:

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

Lệnh của bạn có thể đơn giản như:

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

Tôi có lệnh này chạy như một nhiệm vụ theo lịch trình.


Điều này được gắn cờ là một mối đe dọa trong xi lanh.
CN

Delage32.exe Được xếp hạng 0/53 tại virustotal.com, trong đó số 0 có nghĩa là không có mối đe dọa nào được phát hiện trong số 53 công cụ AV hàng đầu. Bạn có thể muốn thay đổi AV của bạn thành một cái gì đó chính thống hơn.
RobW

Đó không phải là lựa chọn của tôi. Tôi chỉ cảnh báo cho bất kỳ ai sử dụng xi lanh để từ bỏ delage32 hoặc sử dụng các tệp dữ liệu
nhật

1

Đây là một kịch bản powershell tôi đã viết để làm những gì bạn muốn - nó cũng làm nhiều hơn một chút. Tôi sử dụng nó để xóa nhật ký và các tập tin tạm thời khác.

thanh trừng-dem-log.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

Điều này sẽ không làm việc cho các máy tính từ xa. Quản trị viên cần quản lý nhiều máy tính. Dưới đây là tập lệnh có thể được sử dụng để xóa các thư mục trong nhiều máy tính từ xa mà không cần phải đăng nhập vào chúng.

Tập lệnh bên dưới sẽ xóa các thư mục cũ hơn 15 ngày. bạn có thể thay đổi tham số $ ngày mặc dù.

D $ \ Chương trình tệp (x86) \ Research In Motion \ BlackBerry Enterprise Server \ Logs là đường dẫn UNC cho thư mục Blackberry Log. Bạn có thể thay đổi thư mục chứa nhật ký / thư mục của bạn.

Liệt kê tất cả các tên máy chủ của bạn trong tệp server.txt và nó sẽ nằm trong cùng thư mục với tập lệnh này.

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
}

Lưu tập lệnh dưới dạng .ps1 và chạy nó. Bạn có thể lên lịch thông qua tập tin hàng loạt. Bằng cách đó, bạn cần thêm lệnh Change Directory ở đầu tập lệnh.

Chúc vui vẻ.


0

Là một cách tiếp cận khác: thay vì dựa vào truy vấn hệ thống tệp để có thời gian tạo tệp (và nhấn cùng một tệp trong nhiều ngày, cho đến khi chúng hết hạn), bạn có thể thêm tệp vào một chỉ mục của riêng mình tại thời điểm tạo. Chỉ mục có khả năng có thể đơn giản như một tệp được đặt tên sau ngày tạo, được lưu trữ ở một vị trí đã biết, với một tệp trên mỗi dòng.

Nếu bạn có một tệp tạo ứng dụng đa luồng / đa xử lý, thì bạn có thể muốn chỉ mục của mình được xử lý theo cách tinh vi hơn.

Ưu điểm là bạn luôn có một danh sách các tệp được xử lý tương đối đơn giản được tạo vào một ngày nhất định mà bạn có thể lặp đi lặp lại, thay vì phải hỏi lại hệ thống tệp để biết chi tiết.

(Điều này sẽ dựa vào ứng dụng và tạo tệp, được quản lý bởi bạn chứ không phải bởi bên thứ ba).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.