Книга знаний

1С:Предприятие / Приемы программирования / Файловая система

Действия с файлами на компьютерах пользователей

В принципе ничего сложного... Обработка демонстрирует как штатными методами можно сделать нудную работу по замене файлов на компьютерах локальной сетиАвтор статьи: КонецЦикла | Редакторы:
Последняя редакция №7 от 11.05.07 | История
URL: http://kb.mista.ru/article.php?id=530

Ключевые слова: Файловая система, перебор вложенных каталогов, замена файлов, список компьютеров локальной сети


Потребовалось удалить ярлыки 1С Предприятия с компьютеров пользователей и заменить их стартером
Т.к. компьютеров много и не всегда они доступны, то написал я обработочку которая может быть будет полезна еще кому-то...
Обработка позволяет указывать список исключаемых компьютеров для обработки и проводить работу поэтапно (если выполнение прерывается или обработка натыкается на выключенный компьютер)
Обработку можно запускать многократно, она будет пропускать уже "обработанные" компьютеры
Получилось примитивно и неуниверсально, но работает нормально на компьютерах с Win XP и проч.
Флаг ТолькоСообщения на форме выставляется в том случае если нужно просто просмотреть результаты работы без выполнения каких-либо действий
СписокДисков - список значений на форме (Диски C, D)
Флажок СоздаватьСписок - заново создается список компьютеров сети, старый уничтожается
ВыбКомп - строка на форме (если заполнена обрабатывается только этот компьютер)

Вот и все
Пути замените на свои
Если точно знаете где что лежит - можно не перебирать все папки (на это уходит очень много времени)


Перем СписокПапок;
Перем СписокИмен;

Функция ПолучитьСписокПапок(ИмяПапки, Создавать = 0)
   Перем Атрибуты;    
   
   Если Создавать = 1 Тогда
       СписокПапок = СоздатьОбъект("СписокЗначений");
   КонецЕсли;    
   
   ФСО = СоздатьОбъект("ФС");
   
   Файл = ФСО.НайтиПервыйФайл(ИмяПапки + "*");
   Пока ПустаяСтрока(Файл) = 0 Цикл
       Если (Файл <> ".") и (Файл <> "..") Тогда
           ФС.АтрибутыФайла(ИмяПапки + Файл,,Атрибуты);
           Если Сред(Атрибуты, 4, 1) = "1" Тогда
               СписокПапок.ДобавитьЗначение(ИмяПапки + Файл + "\");
               ПолучитьСписокПапок(ИмяПапки + Файл + "\")
           КонецЕсли;
       КонецЕсли;
       Файл = ФСО.НайтиСледующийФайл();
   КонецЦикла;
КонецФункции    


Процедура Сформировать()
   НачТайм = _GetPerformanceCounter();
   
   СписокКомповИсключений = СоздатьОбъект("СписокЗначений");
   СписокКомповИсключений.ДобавитьЗначение("\\PETYA");
   СписокКомповИсключений.ДобавитьЗначение("\\VASYA");
   СписокКомповИсключений.ДобавитьЗначение("\\BACKUP");
   СписокКомповИсключений.ДобавитьЗначение("\\DOMAINSRV-II");
   СписокКомповИсключений.ДобавитьЗначение("\\SERVER");
   СписокКомповИсключений.ДобавитьЗначение("\\SERVER-II");
   
   СписокОбработанныхКомпов = СоздатьОбъект("СписокЗначений");
   СписокПлохихКомпов = СоздатьОбъект("СписокЗначений");
   
   СписокИмен = СоздатьОбъект("СписокЗначений");
   СписокИмен.ДобавитьЗначение("1С Предприятие.lnk");
   СписокИмен.ДобавитьЗначение("1С Предприятие Монопольно.lnk");
   СписокИмен.ДобавитьЗначение("Конфигуратор.lnk");
   СписокИмен.ДобавитьЗначение("Монитор пользователей.lnk");
   СписокИмен.ДобавитьЗначение("Отладчик.lnk");
       
   Если СоздаватьСписок = 1 Тогда
       КомандаСистемы("net view > c:\list.txt");
   КонецЕсли;    
   
   Обработаны = СоздатьОбъект("Текст");
   Если ФС.СуществуетФайл("c:\obr.txt") = 0 Тогда
       Обработаны.Записать("c:\obr.txt");
   КонецЕсли;
   Обработаны.Открыть("c:\obr.txt");
   
   Для СчСтр = 1 по Обработаны.КоличествоСтрок() Цикл
       Стр = Обработаны.ПолучитьСтроку(СчСтр);
       СписокОбработанныхКомпов.ДобавитьЗначение(Стр);
   КонецЦикла;    
   
   Плохие = СоздатьОбъект("Текст");
   Если ФС.СуществуетФайл("c:\bad.txt") = 0 Тогда
       Плохие.Записать("c:\bad.txt");
   КонецЕсли;
   Плохие.Открыть("c:\bad.txt");
   
   Для СчСтр = 1 по Плохие.КоличествоСтрок() Цикл
       Стр = Плохие.ПолучитьСтроку(СчСтр);
       СписокПлохихКомпов.ДобавитьЗначение(Стр);
   КонецЦикла;    
   
   КолКомпов = 0;
   
   СписокКомпов = СоздатьОбъект("СписокЗначений");
   Если ПустоеЗначение(ВыбКомп) = 0 Тогда
       СписокКомпов.ДобавитьЗначение(СокрЛП(ВыбКомп));
   Иначе
       Текст = СоздатьОбъект("Текст");
       Текст.Открыть("c:\list.txt");
       Для СчСтр = 1 по Текст.КоличествоСтрок() Цикл
           Стр = Текст.ПолучитьСтроку(СчСтр);
           
           Если Найти(Стр,"\\") = 0 Тогда
               Продолжить;
           КонецЕсли;
           
           Поз = Найти(Стр," ");
           Если Поз = 0 Тогда
               Продолжить;
           КонецЕсли;
           
           ИмяКомпа = Лев(Стр, Поз-1);
           
           СписокКомпов.ДобавитьЗначение(ИмяКомпа);
       КонецЦикла;
   КонецЕсли;    
       
   Для СчСтр = 1 по СписокКомпов.РазмерСписка() Цикл
       
       ИмяКомпа = Врег(СписокКомпов.ПолучитьЗначение(СчСтр));
       
       Если СписокКомповИсключений.Принадлежит(ИмяКомпа) = 1 Тогда
           Сообщить(ИмяКомпа + " - пропущен");
           Продолжить;
       КонецЕсли;    
       
       Если СписокОбработанныхКомпов.Принадлежит(ИмяКомпа) = 1 Тогда
           Сообщить(ИмяКомпа + " - обработан");
           Продолжить;
       КонецЕсли;    
       
       Если СписокПлохихКомпов.Принадлежит(ИмяКомпа) = 1 Тогда
           Сообщить(ИмяКомпа + " - херовенько с доступом, пропущен");
           Продолжить;
       КонецЕсли;    
       
       Сообщить(ИмяКомпа,"!");
       КолКомпов = КолКомпов + 1;
       
       Состояние("Компьютер: " + ИмяКомпа + ", сведения о папках");
       
       ВыбДиск = СписокДисков.ПолучитьЗначение(СписокДисков.ТекущаяСтрока());
       
       Попытка
           ПолучитьСписокПапок(ИмяКомпа + "\" + ВыбДиск + "$\Documents and Settings\", 1);
       Исключение    
           Сообщить(ИмяКомпа + " - ошибка","!");
           Продолжить;
       КонецПопытки;
           
       ЕстьПапки = 0;
       
       Для Сч = 1 по СписокПапок.РазмерСписка() Цикл
           ИмяПапки = СписокПапок.ПолучитьЗначение(Сч);
                       
           Состояние("Компьютер: " + ИмяКомпа + ", поиск в: " + ИмяПапки);
           
           ЕстьПапки = 1;
           
           Файл = ФС.НайтиПервыйФайл(ИмяПапки + "*.lnk");
           Пока ПустаяСтрока(Файл) = 0 Цикл
               Если СписокИмен.Принадлежит(Файл) = 1 Тогда
                   Если Найти(ИмяПапки, "8.0") = 0 Тогда
                       Если ТолькоСообщения = 0 Тогда
                           ФС.УдалитьФайл(ИмяПапки + Файл);
                       КонецЕсли;    
                       Сообщить("Удален " + ИмяПапки + Файл);
                   КонецЕсли;
               КонецЕсли;
               Файл = ФС.НайтиСледующийФайл();
           КонецЦикла;    
       КонецЦикла;
               
       Если ЕстьПапки = 1 Тогда
           Если ТолькоСообщения = 0 Тогда
               ФС.КопироватьФайл("\\Server\Baza\MD_Free\1С Предприятие.exe", ИмяКомпа + "\" + ВыбДиск + "$\Documents and Settings\All Users\Desktop\1С Предприятие.exe", 1);
               ФС.КопироватьФайл("\\Server\Baza\MD_Free\1С Предприятие.exe", ИмяКомпа + "\" + ВыбДиск + "$\Documents and Settings\All Users\Рабочий стол\1С Предприятие.exe", 1);
           КонецЕсли;
                       
           Сообщить("Скопировано в " + ИмяКомпа + "\" + ВыбДиск + "$\Documents and Settings\All Users\Desktop\1С Предприятие.exe");
           
           Если ТолькоСообщения = 0 Тогда
               Обработаны.ДобавитьСтроку(ИмяКомпа);
               Обработаны.Записать("c:\obr.txt");    
           КонецЕсли;    
       КонецЕсли;    
       
   КонецЦикла;

   КонТайм = _GetPerformanceCounter();
   Сообщить("Время выполнения: " + Строка((КонТайм - НачТайм) / 1000) + " сек.");
   Сообщить("Кол-во компьютеров: " + КолКомпов);
КонецПроцедуры

ТолькоСообщения = 1;
СоздаватьСписок = 1;
СписокДисков.ДобавитьЗначение("C");
СписокДисков.ДобавитьЗначение("D");








Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика