Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Указание пути в скрипте на JS.

Ответить
Настройки темы
VBS/WSH/JS - Указание пути в скрипте на JS.

Новый участник


Сообщения: 18
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте, на широких просторах интернета нашел скрипт ,
основной задачей которого является "Поиск дубликатов файлов по размеру и их побайтное сравнение посредством штатной утилиты "fc"
Скрипт запускается из командной строки : cscript.exe //nologo ads.js c:\Windows\ > users_duplicates.txt
Запустить скрипт с консольным интерфейсом, сам скрипт ads, путь для проверки и txt файл для логгирования дубликатов.

Как в скрипте жестко указать путь,чтобы не запускать его каждый раз из командной строки а подсунуть в планировщик и выполнять его раз в сутки к примеру.
Пытался жестко прописывать путь, в различных вариациях var path = c:\Windows\; и тд в том же духе. , не получается...
Со скриптами не работал,пока с ними на ВЫ. Заранее спасибо за помощь.

Код: Выделить весь код
var path = WScript.Arguments(0);
var fso = WScript.CreateObject("Scripting.FileSystemObject");
var shell = WScript.CreateObject("WScript.Shell");
var min_file_size = 1024; // минимальный размер файла для проверки

var files = new Array;
WScript.StdOut.WriteLine("Поиск одинаковых файлов в " + path); 

scan(path);
WScript.StdOut.WriteLine("Выбрано файлов для сравнения " + files.length); 
process();
WScript.Quit(0);

function scan(path) {
  var folder = fso.GetFolder(path);
  for(var e = new Enumerator(folder.Files); !e.atEnd(); e.moveNext())
    if (e.item().Size >= min_file_size)
      files.push(e.item());
  for(var e = new Enumerator(folder.SubFolders); !e.atEnd(); e.moveNext())
    scan(e.item().Path);
}

// сравнивает по возрастанию размера файла
function sort_by_size_asc(a,b) {
  if (a.size < b.size)
    return (-1);
  if (a.size > b.size)
    return 1;
  return 0;
}

// сравнивает по убыванию размера файла
function sort_by_size_desc(a,b) {
  if (a.size > b.size)
    return (-1);
  if (a.size < b.size)
    return 1;
  return 0;
}

// обработка списка файлов
function process(){
  var total_count = 0, total_bytes = 0;
  files.sort(sort_by_size_desc);

  while (files.length > 1) {
    var count = 0;   
    var fc = 0;

    for (var i = 1; i < files.length && files[0].Size == files[i].Size;) {
      fc = shell.Run("fc /b \"" +
        files[0].ParentFolder + "\\" + files[0].Name + "\" \"" +
        files[i].ParentFolder + "\\" + files[i].Name + "\"",0,true);
      if (fc == 0) { // файлы одинаковые
        WScript.StdOut.WriteLine(files[i].ParentFolder + "\\" + files[i].Name);
        files.splice(i,1);
        ++count;
      }
      else
        ++i;
    }
    if (count) { // найдены копии файла files[0]
      WScript.StdOut.WriteLine(files[0].ParentFolder + "\\" + files[0].Name);
      var extra_bytes = files[0].Size * count;
      WScript.StdOut.WriteLine("> " + ++count + " одинаковых файлов (" +
        files[0].Size + " байт в каждом, " +
        extra_bytes + " байт в копиях)");
      ++total_count;
     total_bytes += extra_bytes;
    }
    files.shift(); 
  }
  WScript.StdOut.WriteLine("Всего " + total_bytes + " байт в " +
    total_count + " копиях файлов"); 
}

Отправлено: 08:39, 27-12-2013

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


DMBS, для поиска дубликатов воспользуйтесь лучше утилитой CloneSpy.
Цитата DMBS:
Как в скрипте жестко указать путь,чтобы не запускать его каждый раз из командной строки »
1. Не надо «жёстко указывать путь» в скрипте.
2. Вы никак не избавитесь от командной строки, пока будете продолжать делать перенаправление вывода результатов во внешний файл.

Цитата DMBS:
а подсунуть в планировщик »
Подсовывайте. Что мешает?

Цитата DMBS:
Пытался жестко прописывать путь, в различных вариациях var path = c:\Windows\; »
«c:\\Windows»:
Код: Выделить весь код
var objFSO = WScript.CreateObject("Scripting.FileSystemObject");
var objFolder = objFSO.GetFolder("c:\\Windows");

WScript.Echo(objFolder.Path);
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:06, 27-12-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 18
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо за ответ, Программ, конечно же много не спорю и стандартный TotalCommanderдаже может помочь в этой ситуации,
находил и много исходных кодов с codeguru , которые можно было редактировать под свои задачи.
Нужен именно скрипт на VB или JS.

Отправлено: 09:29, 27-12-2013 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


DMBS, сравнивать по «fc.exe» при наличии дубликатов накладно. Лучше считать хэш MD5 и сравнивать по нему.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:37, 27-12-2013 | #4


Новый участник


Сообщения: 18
Благодарности: 0

Профиль | Отправить PM | Цитировать


Согласен, сканирование папки Windows данным скриптом занимает порядка 3-4 часов))FC очень долго проводит сравнение больших файлов. В сторону md5 смотрел,когда хотел программу написать на с# , куда копать в JS в данном направлении честно понятия не имею!

Отправлено: 09:44, 27-12-2013 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Копать нужно в сторону бесплатных компонентов, например, Microsoft CAPICOM 2.1.0.2: Download Security Update for CAPICOM (KB931906) from Official Microsoft Download Center (не уверен в наличии, возможности установки и работоспособности под Windows 7 и выше) или XStandard MD5 Component. Либо использовать PowerShell, где вычисление MD5 доступно посредством .Net.

Отправлено: 11:05, 27-12-2013 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Указание пути в скрипте на JS.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Ошибка в скрипте JS определения размера экрана zion87 Вебмастеру 1 18-02-2013 22:48
[решено] JS. Как установить onblur из JS? Sanchos Вебмастеру 2 04-07-2010 13:16
Указание пути Programm Files при установкe Winows XP Sel4 Автоматическая установка Windows 2000/XP/2003 1 19-04-2009 08:22
Не загружаются "тяжелые" приложения в Win2k -журнал выдает указание на файл ntdll.dll zuluss Программное обеспечение Windows 10 12-08-2005 13:58
Указание прокси в свойствах обозревателя Guest Хочу все знать 3 26-03-2003 01:52




 
Переход