Пример запуска скрипта на WSH (JS) для удаления файлов по маске и дате.
Скрипт
test_del.js
запускать из командной строки или через планировщик Windows.
Синтаксис:
test_del.js путь маска срок [логфайл [тест [тип даты]]]
Обязательные ключи:
-
путь - полный путь к каталогу с файлами (например C:\temp или \\srv\c$\temp);
-
маска - маска файла (например * (все файлы) или txt). точку можно не писать.
Пример для файла test.exe можно указать на выбор условие: st.exe или t.exe или
.exe или xe или е;
-
срок - в днях, считая назад от сегодняшнего.
Необязательные ключи:
-
логфайл - писать или нет (по умолчанию нет). Значения 1 или 0. Пишет в целевой
каталог;
-
тест - тестовый запуск без удаления (по умолчанию нет). Значения 1 или 0;
-
тип даты - сверять с датой создания - 0 (по умолчанию), или с датой последнего
изменения - 1.
!!!Все ключи указывать в строгой посдедовательности!!!
Для удаления файлов оканчивающихся на tmp в папке c:\temp старше 14 дней и логированием:
- по дате последнего изменения:
test_del.js c:\temp tmp 14 1 0 1
- по дате создания:
test_del.js c:\temp tmp 14 1
Пример js файла:
(Скачать файл можно будет здесь
test_del-1.3.zip. ЗЫ Не тыкать! Жать правой
кнопкой: сохранить ссылку как...)
Текст на WSH (JS):
//JScript
// Version 1.3 (2010-09-03)
// Copyright 2009-2010 Konstantin Nadezhdin <w.homenki.ru>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
objArgs = WScript.Arguments;
var fso = new ActiveXObject("Scripting.FileSystemObject");
//Входные параметры
//Каталог
try {
var srvpath = objArgs(0);
}
catch(e) {
WScript.Echo("Не задан каталог");
WScript.Quit();
}
//Маска
try {
var filemask = objArgs(1);
}
catch(e) {
WScript.Echo("Не задана маска");
WScript.Quit();
}
//Время хранения дней
try {
var timetosave = objArgs(2);
}
catch(e) {
WScript.Echo("Не задано время хранения");
WScript.Quit();
}
//Делать лог или нет (по умолчанию нет)
try {
var makelog = objArgs(3);
}
catch(e) {
var makelog = 0;
}
//Делать тест или нет (по умолчанию нет)
try {
var maketest = objArgs(4);
}
catch(e) {
var maketest = 0;
}
//По дате создания или изменения (по умолчанию создания)
try {
var datetype = objArgs(5);
}
catch(e) {
var datetype = 0;
}
//Логфайл
var logfilename = "dellog.txt";
var AbsolutePathToLogFile = ShowAbsolutePath(srvpath)+"\\"+logfilename
if (filemask == "*") {
usere=0;
}
else {
re = new RegExp(filemask+"$","i");
usere=1;
};
if (maketest != 0) WScript.Echo("Маска: " + filemask +"\n"+"Срок хранения дней: " + timetosave+"\n"+"Путь: "+srvpath); //если тест
//список файлов соответствующих маске:
if (fso.FolderExists(srvpath)) {
flist = ShowFolderFileList(srvpath);
}
else {
if (maketest != 0) WScript.Echo("Указанный путь недоступен"); //если тест - вывести сообщение на экран
WScript.Quit();
};
flistnew = new Array();
j=0;
if (usere == 1) {
for (i = 0; i < flist.length; i++) {
var path = new String(flist[i]);
retest=re.test(path);
if (retest) {
flistnew[j] = path;
j++;
};
};
}
else {
for (i = 0; i < flist.length; i++) {
flistnew[j] = new String(flist[i]);
j++;
};
};
//Проверка даты и удаление
for (i = 0; i < j; i++) {
f = fso.GetFile(flistnew[i]);
if (datetype == 1) {
s = new Date(f.DateLastModified);
}
else {
s = new Date(f.DateCreated);
}
yr = s.getYear();
mo = s.getMonth()+1;
dy = s.getDate();
deltaday = DaysBetweenDateAndNow(yr, mo, dy);
if (deltaday > timetosave) {
if (flistnew[i] != AbsolutePathToLogFile) {
if (maketest != 0) WScript.Echo("У файла: " + ShowFileName(flistnew[i]) + ",\n" +"созданного: " + s +",\n"
+ "прошел срок хранения. Текущее значение: " + deltaday); //если тест
try {
logdelstr = "Удален ";
if (maketest == 0) delfiles(flistnew[i]); //если не тест
}
catch(e) {
logdelstr = "Ошибка удаления ";
}
if (makelog != 0) {
logfile = fso.OpenTextFile(AbsolutePathToLogFile, 8, true);
logfile.WriteLine(logdelstr + TimeDemo(0) + " файл: " + ShowFileName(flistnew[i]));
logfile.Close();
}
if (maketest != 0) WScript.Echo(logdelstr + TimeDemo(0) + " файл: " + ShowFileName(flistnew[i])); //если тест
}
}
}
//Функции
function TimeDemo(tims){
var d, s = "";
var c = ".";
d = new Date();
s += d.getDate() + c;
if ((d.getMonth() + 1 - tims) < 1) {
s += (d.getMonth() + 1 - tims +12) + c;
s += (d.getYear()-1);
}
else {
s += (d.getMonth() + 1 - tims) + c;
s += d.getYear();
};
return(s);
}
function ShowFolderFileList(folderspec) {
var f, f1, fc;
farray = new Array();
f = fso.GetFolder(folderspec);
fc = new Enumerator(f.files);
x = 0;
for (; !fc.atEnd(); fc.moveNext()) {
farray[x]= fc.item();
x++;
};
return(farray);
}
function delfiles(name) {
if (fso.FileExists(name)) {
fso.DeleteFile(name);
};
}
function ShowFileName(filespec)
{
var s = "";
s += fso.GetBaseName(filespec)+"."+fso.GetExtensionName(filespec);
return(s);
}
function ShowAbsolutePath(path)
{
var s= "";
s += fso.GetAbsolutePathName(path);
return(s);
}
function DaysBetweenDateAndNow(yr, mo, dy){
var d, r, t1, t2, t3; //Declare variables.
var MinMilli = 1000 * 60 //Initialize variables.
var HrMilli = MinMilli * 60
var DyMilli = HrMilli * 24
t1 = Date.UTC(yr, mo - 1, dy) //Get milliseconds since 1/1/1970.
d = new Date(); //Create Date object.
t2 = d.getTime(); //Get current time.
if (t2 >= t1)
t3 = t2 - t1;
else
t3 = t1 - t2;
r = Math.round(t3 / DyMilli);
return(r); //Return difference.
}
Что нового в этой версии:
Версия 1.3 (Птн Сен 3 2010):
- Добавлена возможность пропускать неудаляемые файлы.
Версия 1.2 (Втр Фев 2 2010):
- Добавлена возможность выбора типа даты (создания или изменения).
Версия 1.1 (Птн Окт 31 2008):
- Оптимизирован код.
Версия 1.0:
- Первый релиз.