На основе этой обработки.
Текст модуля
Процедура КнопкаВыполнитьНажатие(Кнопка)
WSH = Новый COMobject("wscript.shell");
ПрофильПользователя = WSH.ExpandEnvironmentStrings("%APPDATA%");//Возвращает используемое по умолчанию размещение данных приложений
Каталог1CEStart = ПрофильПользователя + "\1C\1CEStart\";
КаталогСуществует = КаталогИлиФайлСуществует(Каталог1CEStart);
Если КаталогСуществует = Ложь Тогда
Сообщить("Не найден каталог инфрормационной базы. Очистка кэша невозможна.");
Возврат;
КонецЕсли;
// Заменим GUID в списке баз на новый
Файлibases = Каталог1CEStart + "ibases.v8i"; // путь к списку информационных баз пользователя
Если КаталогИлиФайлСуществует(Файлibases) Тогда
// найдём GUID текущей базы
СписокБаз = Новый ТекстовыйДокумент;
СписокБаз.Прочитать(Файлibases);
ТекстФайла = СписокБаз.ПолучитьТекст();
Позиция = Найти(ТекстФайла, СтрокаСоединенияИнформационнойБазы());
Если Позиция = 0 Тогда
Сообщить("Информационная база не найдена в ibases.v8i. Очистка кэша невозможна.");
Возврат;
Иначе
ТекстФайлаCut = Прав(ТекстФайла, СтрДлина(ТекстФайла) - Позиция + 1);
Позиция = Найти(ТекстФайлаCut, "ID=");
GUID = Сред(ТекстФайлаCut, Позиция + 3, 36);
// Если надо обновить GUID
Если ОбновитьGUID Тогда
НовыйGUID = Новый УникальныйИдентификатор;
// Если такой идентификатор уже есть - получим новый и снова проверим
Пока Найти(ТекстФайла, НовыйGUID) > 0 Цикл
НовыйGUID = Новый УникальныйИдентификатор;
КонецЦикла;
Если Вопрос("Будет обновлён список баз.
|Актуально только для баз из пользовательского списка баз!
|Базы из общего списка баз не меняются!
|Текущий GUID " + GUID + ".
|Новый GUID " + НовыйGUID + ".
|Продолжить?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
//Присвоим базе новый идентификатор
ТекстФайлаНовый = СтрЗаменить(ТекстФайла, GUID, НовыйGUID);
СписокБаз.УстановитьТекст(ТекстФайлаНовый);
СписокБаз.Записать(Файлibases);
КонецЕсли;
КонецЕсли;
Иначе
Сообщить("Файл " + Файлibases + " не найден. Очистка кэша невозможна.");
Возврат;
КонецЕсли;
// Создадим и запустим bat-файл, очищающий папку со старым кэшем
// При этом, если обновляем GUID, то очистку делаем вне зависимости от ответа, чтобы не оставались ненужные папки
Если Не ОбновитьGUID Тогда
Если Вопрос("Будет очищена папка " + GUID + ".
|Программа будет завершена. Продолжить?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
КонецЕсли;
//КаталогGUID = ПрофильПользователя + "\1C\1Cv82\" + GUID + "\";
КаталогGUID = ПрофильПользователя + "\1C\1Cv82\" + GUID;
Если КаталогИлиФайлСуществует(КаталогGUID) Тогда
ПутьКФайлуLck = КаталогGUID + "\1Cv8.lck";
ТекстBatФайла = "@echo off
|cls
|cd \
|Echo Ожидание снятия блокировки с файла 1Cv8.lck...
|rem Файл работает следующим образом.
|rem Сначала ждем 5х8=40 с., пока удалится файл 1Cv8.lck (удаляется при закрытии 1С), затем удаляем папку с кэшем.
|rem Если файл не удаляется - завершаем работу программы.
|set /a count=1
|:flag
|rem Если count > 8
|if %count% gtr 8 goto end
|if Not exist """ + ПутьКФайлуLck + """ goto go
|ping -n 5 127.0.0.1 > NUL
|call set /a count+=1
|goto flag
|:go
//|rem Удаляем только файлы
//|Del /F /Q """ + КаталогGUID + "\*.*""
//|rem Удаляем только каталоги внутри
//|for /d %%i in ("""+ КаталогGUID + "\*"") do rmDir /s /q ""%%i""
|rem Удаляем основной каталог и всё, что в нём
|Echo Удаление папки " + КаталогGUID + "...
|rmDir """ + КаталогGUID + """ + /s /q
|:end
// Если надо после очистки запустить 1С, то убрать комментарий в следующих 2 строках и 2-х модулей в конце модуля, но при этом будет появлятся папка 00000000-0000-0000-0000-000000000000
//|Echo Запускаем 1С
//|start """" " + ПолучитьСтрокуЗапуска1С() + "
|rem Удаляем этот файл
|del %0
|";
БатФайл = Новый ТекстовыйДокумент;
БатФайл.УстановитьТекст(ТекстBatФайла);
БатФайл.Записать(КаталогВременныхФайлов() + "\ClearCache.bat", КодировкаТекста.OEM);
ЗапуститьПриложение("""" + КаталогВременныхФайлов() + "\ClearCache.bat""");
ЗавершитьРаботуСистемы(Ложь);
Иначе
Сообщить("Каталог """ + КаталогGUID + """ не найден. Очистка кэша невозможна.");
Возврат;
КонецЕсли;
КонецПроцедуры
// Проверяет существование каталога
// Параметры
// Путь - путь к проверяемому каталогу
//
// Возвращаемое значение
// Булево. Истина, если каталог существует, Ложь, если каталог не существует
//
Функция КаталогИлиФайлСуществует(Путь)
КаталогНаДиске = Новый Файл(Путь);
Если КаталогНаДиске.Существует() Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции