Лео Lапыч
31-12-2015, 13:30
Добрый день, системные администраторы и программисты-разработчики!
Давно хочу решить одну задачку средствами командного интерпретатора Windows, но всё времени не хватает углубиться в тонкости языка.
Задача возникла как скрипт ловушки для системы управления версиями Subversion. В частном случае я её решил, но хотелось бы в общем.
Итак, внимание, задачка:
Исходные данные. Есть текстовый файл, структура которого следующая:
Path1 - Mask1_1
Mask1_...
Mask1_N-1
Mask1_N
Path... - Mask..._1
Mask..._...
Mask..._N-1
Mask..._N
PathM-1 - MaskM-1_1
MaskM-1_...
MaskM-1_N-1
MaskM-1_N
PathM - MaskM_1
MaskM_...
MaskM_N-1
MaskM_N
Пояснения: файл содержит путь, потом символы пробел, минус, пробел и первую маску; последующие маски, относящиеся к этому пути, начинаются с новой строки (CRLF); признаком окончания списка масок, относящихся к пути, являются пустая строка (CRLFCRLF) или конец файла. Дальше всё может повторится для другого пути. Количество путей и масок не ограничено (в разумных пределах).
Требуется получить в локальную переменную командного пакета строку вида:
%Result% = "Path1\Mask1_1 Path1\Mask1_... Path1\Mask1_N-1 Path1\Mask1_N ... Path...\Mask..._1 Path...\Mask..._... Path...\Mask..._N-1 Path...\Mask..._N PathM-1\MaskM-1_1 PathM-1\MaskM-1_... PathM-1\MaskM-1_N-1 PathM-1\MaskM-1_N PathM\MaskM_1 PathM\MaskM_... PathM\MaskM_N-1 PathM\MaskM_N"
То есть разложить этот файл в строку, содержащую пути с маской, разделённые пробелом. Кроме того, все символы разделителя пути / должны быть преобразованы в \.
Возможен, конечно, косяк, если в имени пути или маске содержатся пробелы, либо в имени пути содержатся подряд идущие символы пробел, минус, пробел. Но такие случаи пока от условий задачи отсечём.
Пример:
На основе файла
Projects/Builder - *.~*
*.$*
*.obj
Projects/CSharp - *.cache*
*.suo
Должна получится строка
Projects\Builder\*.~* Projects\Builder\*.$* Projects\Builder\*.obj Projects\CSharp\*.cache* Projects\CSharp\*.suo
Более высокоуровневые языки для решения использовать пока не хочу. Так что у кого на досуге будет время поломать голову, прошу поделиться мыслями.
Благодарен уже за уделённое внимание!
Давно хочу решить одну задачку средствами командного интерпретатора Windows, но всё времени не хватает углубиться в тонкости языка.
Задача возникла как скрипт ловушки для системы управления версиями Subversion. В частном случае я её решил, но хотелось бы в общем.
Итак, внимание, задачка:
Исходные данные. Есть текстовый файл, структура которого следующая:
Path1 - Mask1_1
Mask1_...
Mask1_N-1
Mask1_N
Path... - Mask..._1
Mask..._...
Mask..._N-1
Mask..._N
PathM-1 - MaskM-1_1
MaskM-1_...
MaskM-1_N-1
MaskM-1_N
PathM - MaskM_1
MaskM_...
MaskM_N-1
MaskM_N
Пояснения: файл содержит путь, потом символы пробел, минус, пробел и первую маску; последующие маски, относящиеся к этому пути, начинаются с новой строки (CRLF); признаком окончания списка масок, относящихся к пути, являются пустая строка (CRLFCRLF) или конец файла. Дальше всё может повторится для другого пути. Количество путей и масок не ограничено (в разумных пределах).
Требуется получить в локальную переменную командного пакета строку вида:
%Result% = "Path1\Mask1_1 Path1\Mask1_... Path1\Mask1_N-1 Path1\Mask1_N ... Path...\Mask..._1 Path...\Mask..._... Path...\Mask..._N-1 Path...\Mask..._N PathM-1\MaskM-1_1 PathM-1\MaskM-1_... PathM-1\MaskM-1_N-1 PathM-1\MaskM-1_N PathM\MaskM_1 PathM\MaskM_... PathM\MaskM_N-1 PathM\MaskM_N"
То есть разложить этот файл в строку, содержащую пути с маской, разделённые пробелом. Кроме того, все символы разделителя пути / должны быть преобразованы в \.
Возможен, конечно, косяк, если в имени пути или маске содержатся пробелы, либо в имени пути содержатся подряд идущие символы пробел, минус, пробел. Но такие случаи пока от условий задачи отсечём.
Пример:
На основе файла
Projects/Builder - *.~*
*.$*
*.obj
Projects/CSharp - *.cache*
*.suo
Должна получится строка
Projects\Builder\*.~* Projects\Builder\*.$* Projects\Builder\*.obj Projects\CSharp\*.cache* Projects\CSharp\*.suo
Более высокоуровневые языки для решения использовать пока не хочу. Так что у кого на досуге будет время поломать голову, прошу поделиться мыслями.
Благодарен уже за уделённое внимание!