Книга знаний

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

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

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

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


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


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

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


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

ТолькоСообщения = 1;








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

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