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