Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для eva2326
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518

Генератор исходных файлов для Visual Studio

20.08.2019, 12:57. Показов 1264. Ответов 4

Студворк — интернет-сервис помощи студентам
Всем привет!

Я уже изготовила парочку батников: 00-filter.bat и 00-sources.bat.

Они решают поставленную задачу.
Проблема в том, что мне нужен только один.
А эти двое работают слишком медленно.
Я подумала, что решение на vbs будет быстрее.

Суть задачи:

На вход подаётся путь к каталогу с исходниками проекта.
И имена выходных файлов.

На выходе - два файла: sources.props и test-md.vcxproj.filters
(имена задаются)


Например, если каталог исходников содержит файлы:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
C:\test
 |--- include
 |      `-- dummy.hpp
  `-- src
       |--- plugin
       |     |--- config
       |     |      `-- test.cpp
       |      `-- test.cpp
       |--- tools
       |      `-- test.cpp
       |--- main.cpp
       |--- pch.cpp
       |--- pch.h
       |--- readme.txt
       |--- targetver.h
        `-- test.cpp
Тогда на выходе должно получиться:
sources.props

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
 
  <ItemGroup> 
    <ClInclude Include="$(gPATH_SOURCE)\src\pch.h"/> 
    <ClInclude Include="$(gPATH_SOURCE)\src\targetver.h"/> 
  </ItemGroup> 
                 
  <ItemGroup> 
    <ClInclude Include="$(gPATH_SOURCE)\include\dummy.hpp"/> 
  </ItemGroup> 
                 
  <ItemGroup> 
    <ClCompile Include="$(gPATH_SOURCE)\src\main.cpp"/> 
    <ClCompile Include="$(gPATH_SOURCE)\src\pch.cpp"/> 
    <ClCompile Include="$(gPATH_SOURCE)\src\test.cpp"/> 
    <ClCompile Include="$(gPATH_SOURCE)\src\plugin\test.cpp"/> 
    <ClCompile Include="$(gPATH_SOURCE)\src\plugin\config\test.cpp"/> 
    <ClCompile Include="$(gPATH_SOURCE)\src\tools\test.cpp"/> 
  </ItemGroup> 
                 
  <ItemGroup> 
    <None Include="$(gPATH_SOURCE)\src\readme.txt"/> 
  </ItemGroup> 
                
</Project>
Файлы сгруппированы по расширениям.
Между секциями - пустая строчка


test-md.vcxproj.filters

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
 
  <ItemGroup> 
    <Filter Include="include"/> 
    <Filter Include="src"/> 
    <Filter Include="src\plugin"/> 
    <Filter Include="src\tools"/> 
    <Filter Include="src\plugin\config"/> 
  </ItemGroup> 
                 
  <ItemGroup> 
    <ClInclude Include="$(gPATH_SOURCE)\src\pch.h"> 
      <Filter>src</Filter> 
    </ClInclude> 
    <ClInclude Include="$(gPATH_SOURCE)\src\targetver.h"> 
      <Filter>src</Filter> 
    </ClInclude> 
  </ItemGroup> 
                 
  <ItemGroup> 
    <ClInclude Include="$(gPATH_SOURCE)\include\dummy.hpp"> 
      <Filter>include</Filter> 
    </ClInclude> 
  </ItemGroup> 
                 
  <ItemGroup> 
    <ClCompile Include="$(gPATH_SOURCE)\src\main.cpp"> 
      <Filter>src</Filter> 
    </ClCompile> 
    <ClCompile Include="$(gPATH_SOURCE)\src\pch.cpp"> 
      <Filter>src</Filter> 
    </ClCompile> 
    <ClCompile Include="$(gPATH_SOURCE)\src\test.cpp"> 
      <Filter>src</Filter> 
    </ClCompile> 
    <ClCompile Include="$(gPATH_SOURCE)\src\plugin\test.cpp"> 
      <Filter>src\plugin</Filter> 
    </ClCompile> 
    <ClCompile Include="$(gPATH_SOURCE)\src\plugin\config\test.cpp"> 
      <Filter>src\plugin\config</Filter> 
    </ClCompile> 
    <ClCompile Include="$(gPATH_SOURCE)\src\tools\test.cpp"> 
      <Filter>src\tools</Filter> 
    </ClCompile> 
  </ItemGroup> 
                 
  <ItemGroup> 
    <None Include="$(gPATH_SOURCE)\src\readme.txt"> 
      <Filter>src</Filter> 
    </None> 
  </ItemGroup> 
                 
</Project>


Алгоритм:

1.
На входе получаем путь к каталогу с исходниками,
и имена выходных файлов

2.
Путь к каталогу с исходниками преобразовывается в абсолютный путь.

3.
Зная путь к каталогу, запрашиваем список всех файлов в каталоге
(рекурсивно: включая подкаталоги)

4.
Полученный список анализируется:
Важно: файловый путь,
где имя файла или каталога начинаются с символа подчеркивания _*
должны быть проигнорированы.
(удалены из списка)

4.1
Сначала отбираем из списка все файлы с расширением .h
И генерируем секцию вида:

XML
1
2
3
4
  <ItemGroup> 
    <ClInclude Include="$(gPATH_SOURCE)\src\pch.h"/> 
    <ClInclude Include="$(gPATH_SOURCE)\src\targetver.h"/> 
  </ItemGroup>
4.2
Затем, по аналогии выше, отбираем из списка все файлы с расширением .hpp
XML
1
    <ClInclude Include="$(gPATH_SOURCE)\include\dummy.hpp"/>
Затем, по аналогии выше, отбираем из списка все файлы с расширением .сpp
XML
1
    <ClCompile Include="$(gPATH_SOURCE)\src\main.cpp"/>
В последнюю секцию попадают все оставшиеся файлы,
которые ещё не были обработанны выше
XML
1
    <None Include="$(gPATH_SOURCE)\src\readme.txt"/>
5.
Перебираем весь список, что бы получить списки подкаталогов.
Формируем секцию вида:
XML
1
2
3
4
5
6
7
  <ItemGroup> 
    <Filter Include="include"/> 
    <Filter Include="src"/> 
    <Filter Include="src\plugin"/> 
    <Filter Include="src\tools"/> 
    <Filter Include="src\plugin\config"/> 
  </ItemGroup>
5.1
Далее по аналогии с пунктом 4. - 4.2
Формируются секции вида:
XML
1
2
3
4
5
6
7
8
  <ItemGroup> 
    <ClInclude Include="$(gPATH_SOURCE)\src\pch.h"> 
      <Filter>src</Filter> 
    </ClInclude> 
    <ClInclude Include="$(gPATH_SOURCE)\src\targetver.h"> 
      <Filter>src</Filter> 
    </ClInclude> 
  </ItemGroup>
5.2
В отличие от пункта 4. - 4.2
добавляется вложенный атрибут:
XML
1
<Filter>src</Filter>
Здесь src - это файловый путь относительно родительского каталога с исходниками.

5.3
Например, для файла: $(gPATH_SOURCE)\src\tools\test.cpp
Результат будет выглядеть:
XML
1
2
3
    <ClCompile Include=$(gPATH_SOURCE)\src\tools\test.cpp> 
      <Filter>src\tools</Filter> 
    </ClCompile>
6.0
На основании полученных секций формируем итоговые файлы.


---


Опыта работа с vbscript у меня практически нет.
Я не прошу готовый скрипт.
Буду признательна, если покажите как вообще из под батника запустить vbs,
передав ему стартовые параметры.

И покажите примеры, как на vbs можно рекурсивно обойти файловую систему.

Как формировать, перебирать списки текстовых строк,
и удалять из них элементы.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.08.2019, 12:57
Ответы с готовыми решениями:

Как скомпилировать несколько исходных файлов в исполняемый модуль в командной строке Visual Studio?
7.Как скомпилировать несколько исходных файлов в исполняемый модуль в командной строке Visual Studio?

Создание DLL файлов для C# в Visual Studio
Здравствуйте. В лабораторной стоит задача создать .dll файл . В мануалах написано,что нужно создать проект-&gt;консольное приложение...

Установка C++ Redistributable Visual Studio 2017 и Visual C++ для Visual Studio 2015
Доброго дня. Пытаюсь изучить PHP. Решил установить сервер локальный. В инструкции сказано: &quot;Ещё нам нужен файл C++...

4
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
24.08.2019, 18:48
eva2326, если непременно нужен WSH, лучше обратить внимание на JScript, а не VBScript; прибежит FlasherX будет доказывать обратное, не слушайте, так как в отличии от последнего JScript не стоит на месте и в Win10 может похвастать совместимостью некоторых фич с ECMA (движок chakra). В целом же, описанная вами задача гораздо проще может быть решена в PowerShell. Выбор за вами.
0
24.08.2019, 19:58

Не по теме:

Цитата Сообщение от greg zakharov Посмотреть сообщение
прибежит FlasherX будет доказывать обратное, не слушайте
"Плети плетень – ныне твой день!"
О вкусовых предпочтениях не спорят (js/vbs — кому какая разница?). Также глупо утверждать об простоте. Простота не обуславливается лишь числом символов в коде. Исходит она как минимум из удобочитаемости (в т.ч. ошибок) и быстроты вовлечённости в конву семантической модели. И поскольку 10-ка здесь в условиях не заявлена, как и не приведено ни одного живого wsh-примера, слушать "прибежавшего" FlasherX или "покинувшего форум" greg zakharov — что воду варить да пень колотить...

0
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
24.08.2019, 20:57
FlasherX, для чего эта истерика? Какой вам пример нужен?
0
6985 / 2875 / 1106
Регистрация: 06.06.2017
Сообщений: 9,765
24.08.2019, 21:06
greg zakharov, истерика? Впрочем, день ещё не закончен — можно и её приплести, как и "мой" запрос на примеры...
Цитата Сообщение от eva2326 Посмотреть сообщение
И покажите примеры...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.08.2019, 21:06
Помогаю со студенческими работами здесь

Зачем для создания формы на Angular использовать Visual Studio и Visual Studio Code?
Мне нужно написать форму на ангуляре, которая будет выполнять Select, Insert,Delete из базы данных. Нашла видео, в котором показывают...

Какую среду программирования лучше выбрать для обучения языку C++ ? Visual Studio,Visual Basic или Visual C++?
И напишите,чем рекомендуемая вами среда программирования лучше других? Насколько я понял из Википедии они все поддерживают язык...

Модуль для Rad Studio типа VAssist для Visual Studio
Здравствуйте. Подскажите, какую программку установить для подсветки синтаксиса и всплывающих подсказок?

Шифрование файлов Visual Studio C++
всем хай. Скажу честно, задали курсач, не знаю даже как начать. Основное требование (свободным языком): &quot;у тебя программа должна...

Для тех, у кого visual studio 2008 и XNA game studio 3.0
Здравствуйте! Кто нибудь может мне помочь? Те, у кого есть visual studio 2008 и XNA game studio 3.0, скачайте файл с сайта...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru