Программа предназначена для массового редактирования XML-файлов проектов Vericut. Поддерживаются следующие типы файлов:
.vcproject— файлы проектов Vericut.tls— библиотеки инструментов (Tool Library).mch— описания станков (Machine).ctl— описания систем ЧПУ (Control)
Все четыре типа файлов имеют идентичную XML-структуру и обрабатываются одинаково.
- Точечное изменение конкретных узлов XML через XPath-правила (значения тегов и атрибуты)
- Массовая замена подстрок во всех значениях атрибутов и текстах тегов (например, путей к моделям CATIA)
- Автоматическое создание log-файлов рядом с каждым выходным файлом с прописыванием пути в теге
<Log> - Выбор обрабатываемых типов файлов — можно обрабатывать только нужные расширения
- Фильтр исключаемых папок — возможность пропустить архивные и служебные папки при рекурсивном обходе
- Сохранение и загрузка наборов правил в JSON-файлы для повторного использования
- Сохранение лога работы программы в отдельный
.log-файл - Копирование всех остальных файлов из исходной папки в целевую с полным сохранением структуры каталогов (модели CATIA, G-код, библиотеки, картинки и т.д.)
Типичный сценарий — перенос проектов Vericut на новый сервер или в новую рабочую папку с массовой заменой путей к моделям, библиотекам, G-коду и другим ресурсам, а также полным клонированием структуры проекта.
Окно разделено на две колонки и пять строк.
| Элемент | Назначение |
|---|---|
Исходная папка + Обзор... |
Папка, в которой рекурсивно ищутся файлы .vcproject, .tls, .mch, .ctl |
Целевая папка + Обзор... |
Папка, куда сохраняются обработанные файлы (структура подпапок сохраняется) |
Кнопка 1. Загрузить образец
Открывает диалог выбора файла. Поддерживаются все четыре типа:
Файлы Vericut (*.vcproject;*.tls;*.mch;*.ctl)
Vericut Project (*.vcproject)
Tool library (*.tls)
Machine (*.mch)
Control (*.ctl)
Все файлы (*.*)
Файл используется только как источник структуры — для визуального выбора узлов и построения XPath. Загружать образец не обязательно, если правила уже есть в JSON-файле.
Дерево тегов
Визуальное представление XML-структуры:
- Теги с текстом отображаются как
TagName = "значение"(если у тега есть только текст, без дочерних элементов-тегов) - Атрибуты — как
@attrName = "value"(синий цвет) - Текстовые узлы в смешанном контенте — как
#text = "..."(зелёный цвет) - Полный текст виден в ToolTip при наведении мыши
Панель поиска над деревом
- Поле ввода текста
- Кнопки
◀/▶для навигации между найденными узлами - Счётчик
N / всегосправа - Горячие клавиши:
Enter— следующее совпадениеEsc— сброс поиска
- Поиск регистронезависимый, работает по именам тегов, значениям атрибутов и тексту
Содержит три вкладки:
Таблица с двумя колонками:
| Колонка | Содержание |
|---|---|
| XPath (автоматический) | Путь к узлу, построенный автоматически при выборе в дереве |
| Новое значение | Значение, которое будет записано в узел |
Кнопки:
Удалить выбранные— удаляет выбранные строки правилСохранить— сохраняет правила в JSON-файл (rules.json)Загрузить— загружает правила из JSON-файла (дубликаты пропускаются)
Таблица с тремя колонками:
| Колонка | Содержание |
|---|---|
| Искать | Подстрока, которую нужно найти (например, \\oldserver\path\) |
| Заменить на | На что заменить (например, \\newserver\path\) |
| Только в тегах | Опциональный фильтр. Пусто = применять везде. File,CATIAV5 = только в этих тегах |
Кнопки:
Добавить— добавляет пустую строку и сразу начинает редактированиеУдалить— удаляет выбранные строкиСохранить— сохраняет правила в JSON-файл (substrings.json)Загрузить— загружает правила из JSON-файла
Содержит две группы:
«Обрабатываемые типы файлов» (CheckedListBox)
Список из четырёх расширений: .vcproject, .tls, .mch, .ctl. Все отмечены по умолчанию.
- Если отмечены конкретные типы — обрабатываются только они
- Если не отмечено ни одного — обрабатываются все 4 типа (защита от случайной ошибки)
«Исключаемые папки»
Список папок, которые будут пропущены при рекурсивном обходе. Два переключателя режима:
- По полному пути (по умолчанию) — исключается только конкретная выбранная папка
- По имени папки — исключаются все папки с таким именем на любом уровне вложенности
Кнопки:
Добавить папку...— открывает стандартный диалог выбора папкиУдалить выбранную— удаляет выбранную запись из списка
Новое значение:— поле ввода нового значения2. Добавить правило— берёт XPath из выбранного узла дерева и значение из поля, добавляет строку в таблицу правил XPath
3. Обработать все файлы— запускает массовую обработку файлов выбранных типов☐ Копировать все остальные файлы (с сохранением структуры)— чекбокс, при включении которого после обработки XML-файлов программа скопирует все остальные файлы из исходной папки в целевую с полным сохранением иерархии каталогов. Обработанные файлы при этом не перезаписываются.- Поле логов — отображает ход выполнения, ошибки, статистику по обработке и копированию
Очистить логи— очищает полеСохранить лог в файл— сохраняет содержимое поля логов в.log-файл через стандартный диалог сохранения
Выберите исходную папку (где лежат .vcproject, .tls, .mch, .ctl файлы и сопутствующие ресурсы) и целевую папку (куда будут сохранены обработанные копии и куда будут скопированы остальные файлы).
Нажмите 1. Загрузить образец и выберите любой поддерживаемый файл. Он будет использован только как источник структуры.
Примечание: если у вас уже есть сохранённый JSON-файл с правилами, этот шаг можно пропустить. Достаточно загрузить правила через кнопку
Загрузитьна соответствующей вкладке.
- Разверните дерево, найдите нужный тег или атрибут
- При необходимости используйте поиск (поле над деревом +
Enter)
- Выделите узел в дереве
- Введите новое значение в поле
Новое значение: - Нажмите
2. Добавить правило
Правило появится в таблице на вкладке «Правила XPath». XPath построен автоматически.
Можно также загрузить ранее сохранённые правила из JSON-файла.
Переключитесь на вкладку «Замены подстрок» и добавьте правила массовой замены. Например:
- Искать:
\\sgtfs2.srv.vsmpo.ru\CHPU\USER_WORK\SHOP54\ - Заменить на:
D:\NewPath\ - Только в тегах:
File
Перейдите на вкладку «Настройки»:
- Выберите обрабатываемые типы файлов — снимите галочки с тех расширений, которые не нужно обрабатывать (например, если нужно обработать только
.tlsи.ctl). - Добавьте исключаемые папки — например,
_Archiveв режиме «По имени папки», чтобы пропустить все архивные папки на любом уровне.
Если нужно перенести не только XML-файлы, но и всю структуру проекта (модели CATIA, G-код, библиотеки, картинки и т.д.), установите флажок Копировать все остальные файлы (с сохранением структуры) под кнопкой обработки.
Нажмите 3. Обработать все файлы. Программа:
- Рекурсивно найдёт все файлы выбранных типов в исходной папке (с учётом исключаемых папок)
- Для каждого файла:
- Загрузит XML
- Применит все XPath-правила
- Применит все замены подстрок
- Создаст
.logфайл в целевой папке (имя = имя исходного файла без расширения +.log) - Обновит тег
<Log>на путь к созданному.logфайлу - Сохранит результат в целевую папку
- Если включён флажок копирования:
- Найдёт все остальные файлы в исходной папке (кроме обрабатываемых типов)
- Скопирует их в целевую папку с сохранением структуры подпапок
- Обработанные XML-файлы не перезаписываются
- В окне логов отобразит статистику по обработке и копированию
Нажмите Сохранить лог в файл, чтобы сохранить содержимое поля логов в .log-файл для последующего анализа.
На вкладке «Настройки» в группе «Обрабатываемые типы файлов» можно отметить галочками нужные расширения:
| Расширение | Описание |
|---|---|
.vcproject |
Проект Vericut |
.tls |
Библиотека инструментов |
.mch |
Описание станка |
.ctl |
Описание системы ЧПУ |
Поведение:
- Отмечены конкретные типы → обрабатываются только они
- Не отмечено ни одного → обрабатываются все 4 типа (защита от случайной ошибки)
Выбор влияет на оба этапа:
- Этап 1 — обработка XML-файлов выбранных типов
- Этап 2 — копирование «остальных» файлов (все, кроме выбранных типов)
В группе «Исключаемые папки» можно добавить папки, которые будут пропущены при рекурсивном обходе.
- Пользователь выбирает папку через диалог
- Сохраняется полный путь:
C:\Src\ProjectA\_Archive - Исключается только эта конкретная папка
- Другие папки с именем
_Archiveна других уровнях не исключаются
- Пользователь выбирает любую папку с нужным именем через диалог
- Сохраняется только имя:
_Archive - При обходе все папки с именем
_Archiveна любом уровне вложенности исключаются - В логе видно:
Исключаемых папок (по имени): 1 — _Archive
Исходная структура:
C:\Src\
├── ProjectA\
│ ├── main.vcproject
│ ├── _Archive\ ← старая версия
│ │ └── main.vcproject
│ └── Sub\
│ └── _Archive\ ← ещё одна старая версия
│ └── sub.vcproject
└── ProjectB\
└── _Archive\ ← и ещё одна
└── project.vcproject
| Режим | Что будет исключено |
|---|---|
«По пути», выбран C:\Src\ProjectA\_Archive |
Только ProjectA\_Archive |
«По имени», добавлено _Archive |
Все три папки _Archive на любом уровне |
- Исключение работает на уровне папок целиком — если папка в списке, всё её содержимое (включая подпапки) пропускается
- Сравнение путей регистронезависимое и нормализованное —
C:\Temp\,c:\tempиC:\Tempсчитаются одной и той же папкой - Защита от дубликатов — при добавлении уже существующей записи выдаётся предупреждение
- Список исключений не сохраняется между запусками — при необходимости его можно добавить в сохранение настроек позже
Для каждого выходного XML-файла (.vcproject, .tls, .mch, .ctl) программа автоматически выполняет следующие действия:
- Ищет в документе первый тег
<Log>(независимо от пространства имён) - Формирует путь к log-файлу:
<целевая папка>/<относительный путь>/<имя файла без расширения>.log - Создаёт папку (если её нет) и сам
.logфайл (пустой, либо обновляет время изменения) - Записывает полный абсолютный путь к log-файлу в тег
<Log> - Сохраняет документ — в выходном файле уже корректный путь
Важно: правило для изменения тега
<Log>добавлять не нужно — программа обрабатывает его автоматически.
| Исходный файл | Целевой файл | Созданный log |
|---|---|---|
C:\Src\ProjectA\part.vcproject |
C:\Dst\ProjectA\part.vcproject |
C:\Dst\ProjectA\part.log |
C:\Src\Tools\mill.tls |
C:\Dst\Tools\mill.tls |
C:\Dst\Tools\mill.log |
C:\Src\Machines\5axis.mch |
C:\Dst\Machines\5axis.mch |
C:\Dst\Machines\5axis.log |
C:\Src\Control\sinumerik.ctl |
C:\Dst\Control\sinumerik.ctl |
C:\Dst\Control\sinumerik.log |
Если в исходном файле тега <Log> нет — log-файл не создаётся, обработка продолжается.
При включённом флажке Копировать все остальные файлы (с сохранением структуры) программа выполняет второй этап обработки после работы с XML-файлами.
- Берутся все файлы из исходной папки (рекурсивно, со всеми подпапками, с учётом исключаемых папок)
- Из них исключаются все обрабатываемые типы (те, что отмечены в CheckedListBox) — они уже обработаны и сохранены в целевой папке на первом этапе
- Для каждого оставшегося файла вычисляется относительный путь от исходной папки
- Этот же относительный путь прибавляется к целевой папке — структура сохраняется
- Файл копируется с перезаписью (если в целевой папке уже есть файл с таким именем)
Пусть:
- Исходная папка:
\\sgtfs2.srv.vsmpo.ru\CHPU\ - Целевая папка:
\\sgtfs3\CHPU\ - В настройках отмечены все 4 типа файлов
- В исключениях добавлена папка
_Archiveв режиме «По имени»
Исходная структура:
CHPU\
└── 120.1-120.4\
└── TR644\
├── Machining\
│ └── BTM1600\
│ └── 120.1-120.4_FIXTURE_U1\
│ ├── project.vcproject ← обрабатывается
│ ├── tools.tls ← обрабатывается
│ ├── machine.mch ← обрабатывается
│ ├── model1.CATPart ← копируется
│ └── model2.CATPart ← копируется
├── _Archive\ ← ИСКЛЮЧЕНА
│ └── old.vcproject
└── Vericut\
└── Pic\
└── picture.jpg ← копируется
Результат в целевой папке:
CHPU\
└── 120.1-120.4\
└── TR644\
├── Machining\
│ └── BTM1600\
│ └── 120.1-120.4_FIXTURE_U1\
│ ├── project.vcproject ← ОБРАБОТАН (с новыми путями)
│ ├── project.log ← создан log-файл
│ ├── tools.tls ← ОБРАБОТАН
│ ├── tools.log ← создан log-файл
│ ├── machine.mch ← ОБРАБОТАН
│ ├── machine.log ← создан log-файл
│ ├── model1.CATPart ← скопирован
│ └── model2.CATPart ← скопирован
└── Vericut\
└── Pic\
└── picture.jpg ← скопирован
Папка _Archive не попала в целевую папку — она была исключена на обоих этапах.
- Обрабатываемые XML-файлы не перезаписываются. Обработанные файлы остаются в целевой папке без изменений после этапа копирования.
- Производительность. Копирование идёт в фоновом потоке, ошибки не прерывают процесс — просто логируются. Для тысяч файлов это может занять время, но прогресс отображается в логе.
- Права доступа. Если в исходной папке есть файлы, к которым нет доступа на чтение, или в целевой — на запись, эти файлы будут пропущены с записью ошибки в лог. Остальные файлы продолжат копироваться.
Кнопка Сохранить лог в файл в нижней части окна позволяет сохранить содержимое поля логов в отдельный .log-файл.
- Нажатие кнопки открывает стандартный диалог сохранения файла
- По умолчанию предлагается имя
result.log - После выбора пути всё содержимое поля логов записывается в файл в текстовом виде
- Файл можно открыть в любом текстовом редакторе для анализа
- Долгие обработки — когда программа работает с тысячами файлов, лог может не поместиться в окне
- Архивирование результатов — сохранение отчёта о проделанной работе
- Отладка — анализ ошибок, если что-то пошло не так
- Аудит — документирование изменений для последующих проверок
Программа строит XPath через позиционные индексы среди братьев с тем же именем, а не через атрибуты. Это критически важно для файлов Vericut, где множество тегов <CATIAV5> имеют полностью одинаковые атрибуты.
Для структуры:
<VcProject>
<Setup Name="OP_005">
<Build>
<Component Name="Fixture">
<CATIAV5 Unit="millimeter" ...>
<File>\\server\path\model1.CATPart</File>
</CATIAV5>
<CATIAV5 Unit="millimeter" ...>
<File>\\server\path\model2.CATPart</File>
</CATIAV5>
</Component>
</Build>
</Setup>
</VcProject>Будет построен XPath:
/VcProject[1]/Setup[1]/Build[1]/Component[1]/CATIAV5[1]/File[1]
/VcProject[1]/Setup[1]/Build[1]/Component[1]/CATIAV5[2]/File[1]
Такой путь однозначен даже при совпадающих атрибутах.
XPath заканчивается на /@attrName:
/VcProject[1]/Setup[1]/Report/Tag[1]/@Name
[
{
"XPath": "/VcProject[1]/Setup[1]/Report/Tag[1]",
"NewValue": "ШО-939.010"
},
{
"XPath": "/VcProject[1]/Setup[1]/Report/Tag[2]",
"NewValue": "Рыбаков"
}
][
{
"OldValue": "\\\\sgtfs2.srv.vsmpo.ru\\CHPU\\USER_WORK\\SHOP54\\",
"NewValue": "\\\\newserver\\CAM\\",
"TagFilter": "File"
},
{
"OldValue": "OP_005",
"NewValue": "OP_010",
"TagFilter": ""
}
]- Файлы можно редактировать вручную в любом текстовом редакторе
- При загрузке дубликаты (по XPath) автоматически пропускаются
- Файлы имеют человекочитаемый формат (с отступами)
Если корневой элемент XML-файла имеет пространство имён по умолчанию (xmlns="..."), программа автоматически:
- Регистрирует его с префиксом
ns - Модифицирует XPath-правила, добавляя префикс
ns:ко всем именам тегов
Пользователю не нужно вручную учитывать пространства имён — XPath из дерева работает «как есть».
- XPath-правила — точечные изменения конкретных узлов
- Замены подстрок — массовые изменения во всех значениях
- Создание log-файла и обновление тега
<Log> - Сохранение документа
После обработки всех XML-файлов (если включён флажок):
- Копирование остальных файлов с сохранением структуры
Это гарантирует, что все изменения будут применены до создания log-файла, а копирование не затронет уже обработанные XML-файлы.
- Позиционные индексы привязаны к образцу. Если в другом файле структура тегов отличается (например, меньше
<CATIAV5>в<Component>), XPath-правило может не сработать — будет выдано сообщение об ошибке в логе, обработка остальных файлов продолжится. - Один тег
<Log>на файл. Если в файле несколько тегов<Log>(например, вложенный<GCode><Output><Log>), обрабатывается только первый найденный. - Кодировка. Выходные файлы сохраняются в UTF-8 с BOM (стандартное поведение
XDocument.Save). Это корректно для Vericut. - Сетевые пути. Поддерживаются UNC-пути (
\\server\share\...) как в исходных файлах, так и в целевой папке. - Замены подстрок применяются ко всем значениям. Если фильтр тегов пуст, замена применяется ко всем атрибутам и текстовым узлам во всём документе. Будьте внимательны при указании подстрок.
- Настройки не сохраняются. Список обрабатываемых расширений, исключаемых папок и режим исключения сбрасываются при закрытии программы.
- HTML-файлы (.vctemplate) обрабатываются ограниченно. К ним применяются только замены подстрок. XPath-правила игнорируются. Фильтр тегов в правилах подстрок для HTML также не работает — замены применяются ко всему содержимому файла.
| Сообщение в логе | Причина | Решение |
|---|---|---|
Ошибка: укажите исходную папку. |
Не выбрана исходная папка | Нажмите Обзор... у «Исходная папка» |
Ошибка: укажите целевую папку. |
Не выбрана целевая папка | Нажмите Обзор... у «Целевая папка» |
Ошибка: не добавлено ни одного правила. |
Обе таблицы правил пусты | Добавьте хотя бы одно правило или загрузите JSON |
Родитель не найден по пути: ... |
В обрабатываемом файле структура отличается от образца | Проверьте XPath вручную в дереве |
Узел не найден: ... |
Узел отсутствует в конкретном файле | Это нормально для неоднородных файлов — проверьте образец |
Не удалось создать log-файл: Отказано в доступе |
Нет прав на запись в целевую папку | Проверьте права доступа |
Ошибка копирования (...): Отказано в доступе |
Нет прав на чтение исходного или запись целевого файла | Проверьте права доступа к файлам |
- Загрузите образец
- Перейдите на вкладку «Замены подстрок»
- Добавьте правило:
- Искать:
\\oldserver\path\ - Заменить на:
\\newserver\path\ - Только в тегах:
File
- Искать:
- Включите флажок
Копировать все остальные файлы - Запустите обработку
- Загрузите образец
- Найдите в дереве нужный тег (например,
<Tag Name="Шифр чертежа">) - Выберите его, введите новое значение, нажмите
2. Добавить правило - Повторите для всех нужных тегов
- Запустите обработку
- Добавьте XPath-правила для точечных изменений
- Добавьте правила подстрок для массовой замены путей
- Перейдите на вкладку «Настройки»
- В группе «Исключаемые папки» добавьте
_Archiveв режиме «По имени папки» - Включите флажок
Копировать все остальные файлы - Запустите обработку — программа обработает все XML-файлы (
.vcproject,.tls,.mch,.ctl) и скопирует все остальные файлы с сохранением структуры, пропустив архивные папки
- Перейдите на вкладку «Настройки»
- В группе «Обрабатываемые типы файлов» снимите галочки со всех расширений, кроме
.tls - Добавьте правила XPath и/или подстрок
- Запустите обработку — будут обработаны только
.tlsфайлы
- Укажите исходную и целевую папки
- Нажмите
Загрузитьна вкладке «Правила XPath» — выберите ранее сохранённыйrules.json - При необходимости загрузите
substrings.jsonна вкладке «Замены подстрок» - Запустите обработку — образец загружать не нужно
| Клавиша | Действие |
|---|---|
Enter в поле поиска |
Следующее совпадение |
Esc в поле поиска |
Сброс поиска |
| Расширение | Описание | Формат | XPath-правила | Замены подстрок | Создание .log |
|---|---|---|---|---|---|
.vcproject |
Проект Vericut | XML | ✅ Да | ✅ Да | ✅ Да |
.tls |
Библиотека инструментов | XML | ✅ Да | ✅ Да | ✅ Да |
.mch |
Описание станка | XML | ✅ Да | ✅ Да | ✅ Да |
.ctl |
Описание системы ЧПУ | XML | ✅ Да | ✅ Да | ✅ Да |
.vctemplate |
Карта наладки (HTML-отчёт) | HTML | ❌ Нет | ✅ Да | ❌ Нет |
| другие | Модели, G-код, картинки и т.д. | — | ❌ Нет | ❌ Нет | ❌ Нет (копируется) |
Важно: файлы .vctemplate имеют HTML-структуру, а не XML. Для них применяются
только замены подстрок. XPath-правила к ним не применяются. Кодировка HTML-файлов
определяется автоматически (по BOM или <meta charset>) и сохраняется при записи.
Версия: 2.1.0
Платформа: .NET (Windows Forms), C#
Формат входных/выходных файлов: .vcproject, .tls, .mch, .ctl (XML); .vctemplate (HTML)