Показать сообщение отдельно
  #1 (permalink)  
Старый 04.11.2010, 17:14
Новичок на форуме
Отправить личное сообщение для TheBabka Посмотреть профиль Найти все сообщения от TheBabka
 
Регистрация: 04.11.2010
Сообщений: 1

Помогите переделать скрипт
Есть у меня вот этот скрипт, удаляет старые файлы в указанной папке со многими функциями. Подскажите как сделать так чтобы он удалял еще и файлы содержащиеся в подпапках.
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.
}
Ответить с цитированием