none
скрипт поиска файлов по расширению RRS feed

  • Общие обсуждения

  • Имеется скрипт по поиску файлов по расширению.будьте добры подскажите как можно его модифицировать чтобы он сразу удалял найденые файлы!
    скрипт:

    Set fs = GetObject("script:C:\WINDOWS\system32\ScriptCodingInfo.wsc#FileSystem")
    For Each objItem In fs.WalkFilesEx("C:\Documents and Settings\sev\My Documents\script", ".*\.lnk$","08.02.2008", False)
    WScript.Echo objItem.Path
    Next
    11 сентября 2008 г. 11:34

Все ответы

  • А у objItem нет метода Delete?

    И... Я понимаю, что Вы ждали другого ответа, но не поставить ли Вам PowerShell?

    Code Snippet

    Get-ChildItem "C:\Documents and Settings\sev\My Documents" | where-object {$_.Extension -eq ".lnk$"} | Remove-Item

     

     

    11 сентября 2008 г. 12:36
    Модератор
  • Нет мне бы на VBS лучше
    11 сентября 2008 г. 12:47
  • Точно? Мне кажется на PowerShell получилось бы куда быстрее и проще...

    Code Snippet

    dir "C:\Documents and Settings\sev\My Documents\*.txt" | del

     

     

    12 сентября 2008 г. 3:53
    Модератор
  • del /s /q /a "C:\Documents and Settings\Сергей\*.txt"
    12 сентября 2008 г. 12:10
  • А как можно найти на диске F: все файлы с расширением doc и изменить расширение на rtf?

    было бы здорово если бы делалось все из командной строки без участия скриптов

    Заранее благодарю
    12 сентября 2008 г. 15:24
  • Просто из командной строки:


    C:\> for /f "tokens=*" %i in ('dir /b /s /a f:\*.doc') do ren "%~fi" "%~ni.rtf"

    12 сентября 2008 г. 18:35
  • спасибо огромное.

    Я так понимаю, структура документа остается доковская, меняется только расширение.
    (так как размер одинаковый)

    А есть ли возможность из командной строки полной конвертации в формат RTF?
    13 сентября 2008 г. 8:23
  • нет, это уже только скриптом. Ну или поискать утилиту именно такую. Вдруг есть.

    13 сентября 2008 г. 9:40
    Модератор
  •  Alexander Trofimov написано:

    нет, это уже только скриптом. Ну или поискать утилиту именно такую. Вдруг есть.



    ясно. прога не подходит.скрипт тогда необходим. Подскажите плиз код подобного скрипта.

    Заранее благодарю
    13 сентября 2008 г. 11:48
  • Писал когда-то такой вот скрипт, для поиска-перемещения "вредных" файлов с файлового хранилища. Предлагаю в качестве образца. Скрипт правда на JScript

    Code Snippet

     

    /**************************************************************************
    Имя: extscaner.js
    Комментарий: Скрипт поиска и перемещения файлов с определенными расширениями
    Язык: JScript
    Автор: Андрей Мишечкин
    **************************************************************************/
    var FileCounter;      //Счетчик файлов
    var TotalExtSize;      //Общий размер, занимаемый файлами с определенным расширением
    var FolderObj;       //WSH объект стартовой папки поиска
    var StartFolder;      //Папка начал сканирования
    var ExceptFolders;     //Папки исключенная из сканирования
    var i;             //Счетчик цикла           

    var ReportDirectory = "G:\\FileService\\Extscanreport\\";        //Каталог отчетов работы скрипта
    var DenyFilesDirectory = "I:\\DenyFiles\\";
    /////////////////////////////////////////////////////////
    //  Считывание аргументов коммандной строки        //
    /////////////////////////////////////////////////////////
    var Args = WScript.Arguments;
    if (Args.length == 1)
    {
     if(Args(0) != "/?")
     {
        StartFolder = Args(0);
        ExceptFolders = null;
      }
      else
        HelpMessage()
    }
    else if(Args.length > 1)                     //Формирование массива папок исключенных из сканирования

     StartFolder = Args(0);
     ExceptFolders = new Array(Args.length - 1);
     for(i=0;i<Args.length-1;i++)
      ExceptFolders[i] = Args(i+1);
    }
    else                          //Неправильные аргументы коммандной строки
     HelpMessage();

    var TotalSize = 0;                       //Общий размер, занимаемый файлами

    /////////////////////////////////////////////////////////
    //   Создание необходимых системных объектов      //
    /////////////////////////////////////////////////////////
    var WshShell = WScript.CreateObject("WScript.Shell");              //WshShell - используется для выполнения системных комманд 

    ///////////////////////////////////////////////////////////
    //  Создание необходимых объектов файловой системы      //
    ///////////////////////////////////////////////////////////
    var fso = WScript.CreateObject("Scripting.FileSystemObject");            //Объект для файловой системы
    try
    {
     var strPathName = StartFolder.substr(3) + "_" + GetTime() +".mcln"
      var re = /\\/g;
      strPathName = strPathName.replace(re,"_");
      strPathName = ReportDirectory +  strPathName;
      //WScript.Echo(strPathName)
      var ReportFile = fso.CreateTextFile(strPathName,true);            //Создание файла отчета и открытие его потока
      var RptFileSpec = fso.GetAbsolutePathName(strPathName);
    }
    catch(e)
    {
     WScript.Echo("Report file creation error. " + e.description);
     WScript.Quit();
    }

    ReportFile.WriteLine("Start folder name: " + StartFolder);
    if(ExceptFolders != null)
    {
     for(i=0;i<ExceptFolders.length;i++)
      ReportFile.WriteLine("Except folder "+ (i+1) +" : " + ExceptFolders[i]); 
    }
    try
    {
     FolderObj = fso.GetFolder(StartFolder);                 //Попытка получения объекта стартовой папки поиска
    }
    catch(e)                         //Обработка ошибки создания объекта стартовой папки
    {
     ReportFile.Write("Unable to open directory. " + StartFolder + ". Error: " + e.description);
     WScript.Echo("Unable to open directory " + StartFolder + ". Error: "+e.description+"\n");
     ReportFile.Close();
     SendMail(RptFileSpec);                     //Посылка файла отчета по почте
     WScript.Quit();
    }
    /////////////////////////////////////////////////////////////////////
    //   Вызов функций сканирвания для определенных расширений файлов  //
    /////////////////////////////////////////////////////////////////////
    ReportFile.WriteBlankLines(1);
    CallLoopSubFolders(FolderObj,"rar",false);
    CallLoopSubFolders(FolderObj,"exe",false);
    CallLoopSubFolders(FolderObj,"avi",true);
    CallLoopSubFolders(FolderObj,"vob",true);
    CallLoopSubFolders(FolderObj,"ifo",true);
    CallLoopSubFolders(FolderObj,"iso",true);
    CallLoopSubFolders(FolderObj,"mp3",true);
    CallLoopSubFolders(FolderObj,"mpg",true);
    CallLoopSubFolders(FolderObj,"zip",false);
    CallLoopSubFolders(FolderObj,"wmv",true);
    CallLoopSubFolders(FolderObj,"swf",true);
    CallLoopSubFolders(FolderObj,"mpeg",true);
    CallLoopSubFolders(FolderObj,"jpg",false);

    ///////////////////////////////////////
    //      Конец скрипта      //
    ///////////////////////////////////////
    ReportFile.WriteLine("\nTotal size: " + Math.round(TotalSize) + " Mb" + "\n");
    ReportFile.Close();                        //Закрытие файла отчета
    SendMail(RptFileSpec);                       //Отправка отчета по электронной почте

    /**********************************************************************/
    /*    Функция начала сканирования файлов                       */
    /*  (предназначена для унификации операций записи в файл отчетов)     */
    /**********************************************************************/
    function CallLoopSubFolders(fldr,flext,removing)
    {
     FileCounter = 0;
     TotalExtSize = 0;
     ReportFile.WriteLine("Scanning extension: " + flext);         
     LoopSubFolders(fldr,flext,removing);               //Вызов функции сканирвоания подпапок стартовой папки
     ReportFile.WriteLine("Total: " + FileCounter + " files");
     ReportFile.WriteLine("Total extension size: " + Math.round(TotalExtSize) + " Mb" + "\n");
     TotalSize += TotalExtSize;
     ReportFile.WriteBlankLines(1);
    }

    /**********************************************************************************/
    /*    Рекурсивная функция сканирования файлов в подпапках стартовой папки          */
    /**********************************************************************************/
    function LoopSubFolders(fldr,flext,removing)
    {
     ScanFilesInFolder(fldr,flext,removing);               //Вызов функции сканирования файлов в текущей папке
     var SubFoldersEnum = new Enumerator(fldr.SubFolders);           //Создание коллекции для всех подпапок текущей папки
     while(!SubFoldersEnum.atEnd())                 //Цикл перебора всех подпапок
     {
      var ExceptThisFolder = false;                //Переменная исключения папки из сканирования
      if(ExceptFolders != null)          
      {
       for(i=0;i<ExceptFolders.length;i++)
       {
        if(SubFoldersEnum.item().Path == ExceptFolders[i])        
        {
         ExceptThisFolder = true;              //Исключение папки из сканирования 
         break;
        }
       }
      }
      if(ExceptThisFolder == false)
       LoopSubFolders(SubFoldersEnum.item(),flext,removing);         //Рекурсивный вызов функции для каждого объекта подпапки
      SubFoldersEnum.moveNext();                 //Переход к следующему элементу коллекции
     }

    /*******************************************************************************/
    /*    Функция сканирования файлов в папке                               */
    /*******************************************************************************/
    function ScanFilesInFolder(fldr,flext,removing)
    {
     var NewFileName;
     var Files = new Enumerator(fldr.Files);
     while(!Files.atEnd())
     {
      var FullFileName = Files.item().Path;                              //Определение полного имени файла с путем
      WScript.Echo(FullFileName);
        var FileSize = Files.item().Size/1048576;                           //Определение размера файла (перевод в мегабайты)
      var CurrentFileExtension = fso.GetExtensionName(FullFileName);          //Определение расширения текущего файла
      if((CurrentFileExtension == flext)||(CurrentFileExtension == flext.toUpperCase()))              //Расширение совпадает с искомым
      {
       FileCounter++;                                             //Увеличение счетчика файлов
       TotalExtSize += FileSize;                                      //Увеличение общего размера файлов
       var FileOwner = GetFileOwner(FullFileName);                        //Вызов функции опеределяния владельца файла
       //WScript.Echo(FullFileName + ". Size: "+ Math.round(FileSize) + " Mb" + ". Owner: " + FileOwner);
          try
          {
            ReportFile.WriteLine("File: " + FullFileName + ". Size: "+ Math.round(FileSize) + " Mb" + ". Owner: " + FileOwner);
       }
       catch(e)
          {
            ReportFile.WriteLine("Unable to write information to report file. " + e.description);
          }
          if(removing)
       {
        ///////////////////////////////////////////////////////////////////
        //     Перемещение файла в специальный каталог                //
        ///////////////////////////////////////////////////////////////////
        try
        {
         var FileParentFolder = Files.item().ParentFolder               //Определение папки, содержащий текущий файл
         var OriginPath = new String(FileParentFolder.Path);             //Считывание пути к папке в указатель OriginPath на строковый объект
         var NewPath = OriginPath.substr(3);                         //Создание нового пути
         NewPath = DenyFilesDirectory + NewPath;                        
         if(!fso.FolderExists(NewPath))                            //Проверка наличия папки для сохранения файла
         {
          var oExec = WshShell.Exec("%COMSPEC% /c mkdir " + "\""+ NewPath + "\"");  //В случае отсутствия папке - создание ее с таким же путем как и оригинальная
          while (oExec.Status == 0)
           WScript.Sleep(100);
         }
         NewPath += "\\";
         NewFileName = NewPath + Files.item().Name;
         if(!fso.FileExists(NewFileName))
          Files.item().Move(NewPath);                               //Перемещение файла
         else
         {
          NewFileName += ".";
          NewFileName += GetTime();
          Files.item().Copy(NewFileName);
          Files.item().Delete();
         }
         ReportFile.WriteLine("File removed");
        }
        catch(e)                                              //Обработка ошибки операций создания папки/перемещения файла
        {
         ReportFile.WriteLine("File " + FullFileName + " is not removed. Error: "+ e.description+"\n");
        }
       }
      }
      Files.moveNext()                                           //Переход к следующему элементу коллекции Files
     }
    }

    /****************************************************************************************/
    /*     Функция получения владельца файла           */  
    /****************************************************************************************/
    function GetFileOwner(file)
    {
     var result;                      //Возвращаемая переменная
     try                        //Попытка получения владельца файла
     {
      var WMILFSObj = GetObject("winmgmts:Win32_LogicalFileSecuritySetting.Path='"+ file + "'"); //Создание WMI-объекта для текущего файла
      var OutParamsObj = WMILFSObj.ExecMethod_("GetSecurityDescriptor");       //Выполнение метода получения дескриптора безопасности объекта WMI 
      var SecDesc = OutParamsObj.Descriptor;              //Парсинг выходного параметра метода объекта WMI
      var FileOwnerObj = SecDesc.Owner;
      result = FileOwnerObj.Name;                 //Возвращаемое значение - владелец файла
     }
     catch(e)                      //Обработка ошибки получения владельца файла
     {
      result = "Undefined";                  //Возвращаемое значение - неопределен
     }
     return result;                     //Возвратить результат
    }

    /*******************************************************************************/
    /*  Функция отправки сообщения по электронной почте                 */
    /*******************************************************************************/
    function SendMail(FileSpec)
    {
       var objEmail = WScript.CreateObject("CDO.Message");
       objEmail.From = "\"ExtScaner script\" script@company.ru";
       objEmail.To = "admin@company.ru";
       objEmail.Subject = StartFolder + " report";
       objEmail.AddAttachment(FileSpec);
       objEmail.Textbody = "ExtScaner script report in attachment";
       objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2;
       objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.company.ru";
       objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25;
       objEmail.Configuration.Fields.Update();
       objEmail.Send();
    }

    /*******************************************************************************/
    /*      Функция получения текущей даты и времени                         */
    /*******************************************************************************/
    function GetTime()
    {
     var objCurrentDate = new Date;
     var strCurrentTime = objCurrentDate.getDate();
     var CurrentMonth = (objCurrentDate.getMonth()+1);
     if(CurrentMonth<10)
      strCurrentTime +="0";
     strCurrentTime += CurrentMonth;
     strCurrentTime += objCurrentDate.getYear();
     strCurrentTime += "_";
     strCurrentTime += objCurrentDate.getHours();
     strCurrentTime += objCurrentDate.getMinutes();
     strCurrentTime += objCurrentDate.getSeconds();
     return strCurrentTime;
    }
    /*******************************************************************************/
    /*      Функция вывода подсказки              */
    /*******************************************************************************/
    function HelpMessage()
    {
       WScript.Echo("Use: [cscript/wscript] extscaner[.js] StartFolderFullName [ExceptionFolderName1] ... [ExceptionFolderNameN]");
       WScript.Quit();
    }

     

     

    Понимаю, что код сложный, поэтому вопросы можешь задавать на andy_mishechkin@hotmail.com

    4 октября 2008 г. 7:39