bat-скрипт для удаления файла старше 7 дней

У меня есть bat-скрипт, в котором получаются все файлы в папке, а затем конвертируется эта папка с ее содержимым в один RAR-файл. Этот сценарий также добавляет текущую дату после создания копии и перемещает этот файл в папку резервного копирования. Я планирую, чтобы этот bat-файл запускался планировщиком Windows каждый день.

Мой вопрос:

Есть ли способ добавить в этот скрипт удаление всех rar-файлов старше 7 дней в резервной папке?

for /f "delims==" %%D in ('DIR D:\scripts /A /B /S') do (  
"C:\Program Files\WinRAR\WinRAR.EXE"  a -agyyyy-MM-dd -r "c:\backup\scripts.rar" "%%D"  
) 

person Jessie    schedule 08.06.2010    source источник


Ответы (3)


Просто так бывает...

У меня есть очень похожий скрипт (Visual Basic Script), который делает это. Однако вам нужно будет изменить путь к каталогу, расширение файла (.RAR) и длину даты (в этом примере для >=3 установите значение 7):

РЕДАКТИРОВАТЬ 1: просто скопируйте и вставьте это в новый текстовый файл и переименуйте расширение в .vbs.

Пример сценария решения:

On Error Resume Next   
Dim fso, folder, files, sFolder, sFolderTarget     
Set fso = CreateObject("Scripting.FileSystemObject")   

'location of the database backup files 
sFolder = "X:\Data\SQL_Backup\" 

Set folder = fso.GetFolder(sFolder)   
Set files = folder.Files     

'used for writing to textfile - generate report on database backups deleted 
Const ForAppending = 8 

'you need to create a folder named “scripts” for ease of file management &  
'a file inside it named “LOG.txt” for delete activity logging 
Set objFile = fso.OpenTextFile(sFolder & "\scripts\LOG.txt", ForAppending) 

objFile.Write "================================================================" &   VBCRLF & VBCRLF 
objFile.Write "                     DATABASE BACKUP FILE REPORT                " & VBCRLF 
objFile.Write "                     DATE:  " &    FormatDateTime(Now(),1)   & "" & VBCRLF 
objFile.Write "                     TIME:  " &    FormatDateTime(Now(),3)   & "" & VBCRLF & VBCRLF 
objFile.Write "================================================================" & VBCRLF  

'iterate thru each of the files in the database backup folder 
 For Each itemFiles In files  
'retrieve complete path of file for the DeleteFile method and to extract  
'file extension using the GetExtensionName method 
 a=sFolder & itemFiles.Name 

'retrieve file extension  
b = fso.GetExtensionName(a) 
   'check if the file extension is BAK 
   If uCase(b)="BAK" Then 

       'check if the database backups are older than 3 days 
       If DateDiff("d",itemFiles.DateCreated,Now()) >= 3 Then 

           'Delete any old BACKUP files to cleanup folder 
           fso.DeleteFile a  
           objFile.WriteLine "BACKUP FILE DELETED: " & a 
       End If 
   End If 
Next   

objFile.WriteLine "================================================================" & VBCRLF & VBCRLF 

objFile.Close 

Set objFile = Nothing 
Set fso = Nothing 
Set folder = Nothing 
Set files = Nothing

Надеюсь, это поможет.

person Darknight    schedule 08.06.2010
comment
спасибо, как я могу заставить этот код запускаться в планировщике Windows? также имя моих файлов будет c:\backup\scripts2010-06-07.rar и так далее, этот скрипт подойдет для этого? - person Jessie; 09.06.2010
comment
Я дам более подробную информацию утром, мне нужно спать!! :) - person Darknight; 09.06.2010
comment
(1) Для запуска в планировщике Windows просто создайте файл .BAT с путем к этому сценарию .vbs внутри него, поэтому, когда файл .BAT запускается, он вызывает этот сценарий .vbs. (2) Имя файлов не имеет значения, вы просто указываете его на каталог, в котором существуют эти файлы, и он использует дату создания файлов для перехода. Так что да, скрипт будет работать для этих имен файлов. - person Darknight; 09.06.2010
comment
Вы имеете в виду, что весь этот скрипт находится внутри файла с именем script.vbs, затем создайте другой файл с именем delete.bat, внутри которого есть: c:\scripts\script.vbs, затем из планировщика Windows запустите c:\scripts\delete.bat? ? - person Jessie; 10.06.2010
comment
Да, это правильно. Или вы можете выполнить эту команду внутри существующего сценария .bat, например, после того, как вы создали .rars, - person Darknight; 10.06.2010
comment
я пытался сделать это, но это ничего не дает, я попытался провести исследование и обнаружил, что помещение csscript C:\script\script.vbs в файл bat может работать, но все равно ничего не удаляет. - person Jessie; 11.06.2010
comment
Это может быть из-за разрешений, какую ОС вы используете? Vista или более поздние версии, безусловно, будут иметь проблемы с разрешением. В планировщике Windows есть возможность запуска с «максимальными привилегиями», чтобы иметь доступ «чтение/запись/удаление». Этот скрипт отлично работает для меня (выполняется как запланированная задача) - person Darknight; 11.06.2010
comment
Вы уверены, что внутри вашего .bat-файла есть так же, как c:\script\script.vbs ? или вам нужна другая команда, чтобы запустить его? - person Jessie; 11.06.2010
comment
да, я уверен на 100%. Вот тест, который я только что сделал сам, попробуйте сейчас: (1) создайте файл .vbs и поместите в него эту строку: msgbox(Hello World) сохраните его в этом месте: c:\test.vbs теперь перейдите в DOS командную строку и введите: c:\test.vbs вы должны увидеть окно сообщения Hello World это ничем не отличается от ввода его в cmd или в .BAT. Я уверен, потому что я использую этот сценарий резервного копирования более 6 месяцев без проблем. - person Darknight; 11.06.2010

взгляните на утилиту forfiles.exe - она ​​должна делать то, что вам нужно

person phatmanace    schedule 08.06.2010
comment
можете ли вы сказать мне, как я могу использовать forfiles для удаления файлов старше 7 дней? - person Jessie; 09.06.2010

Попробуйте робокопию! Вы должны сначала переместить все файлы в папку удаления, а затем удалить папку, что-то вроде этого в пакетном файле:

md C:\Delete
robocopy YourFolderToDeleteFrom C:\delete /E /minage:7
rmdir C:\delete /S /Q
person Oskar Kjellin    schedule 08.06.2010
comment
@ Джесси Что ты имеешь в виду? У меня работает нормально - person Oskar Kjellin; 09.06.2010