Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
3 / 3 / 0
Регистрация: 28.05.2011
Сообщений: 18

Копирование структуры шаблона с заменой строковых значений

21.10.2017, 13:37. Показов 770. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
bats.zipЕсть некая структура шаблона, представленная в виде дерева каталогов и файлов. В некоторых файлах объявлены переменные, например {$PROJECT} или {$BUNDLE}.

При создании нового проекта нужно скопировать эту структуру в новое место, заменив при этом переменные на конкретные значения. Саму замену мне сделать не удается.
Во вложении пример. Вот один из исходных файлов:
Windows Batch file
1
2
3
qdqw-{$PROJECT}-dqwd
qdqw-nothing-dqwd
qdqw-{$BUNDLE}-dqwd
Написал скрипт, который вызываю так
Windows Batch file
1
create.bat to MyProject Bundle
Windows Batch file
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
@echo off
 
rem Проверяем заполненность параметров
if "%~1"=="" (Call :wrongparams& Exit /B)
if "%~2"=="" (Call :wrongparams& Exit /B)
if "%~3"=="" (Call :wrongparams& Exit /B)
 
rem Директория, откуда копируем
set dir_from=from
 
rem Временный файл
set temp_file=tmp.txt
 
rem Создаем директорию
mkdir "%~1"
 
rem Если директория не создалась, выходим
if not exist "%~1" (Call :dirnotexists& Exit /B)
 
rem Копируем шаблон - всю структуру рекурсивно
xcopy %dir_from% "%~1" /e /y
 
rem Что заменять
set search1={$PROJECT}
rem На что заменять
set replace1=%2
 
rem Что заменять
set search2={$BUNDLE}
rem На что заменять
set replace2=%3
 
setlocal enabledelayedexpansion
    
for /f "tokens=* delims=" %%z in ('dir /b/s/a-d "%~1"') do (
    
    rem Удаляем временный файл
    if exist %temp_file% del %temp_file%
    
    echo %%z
    
    for /F "delims=," %%n in (%%z) do ( 
        set data=%%n
        
        rem Что-то фактически замены не просходит
        set data=!data:%search1%=%replace1%!         
        set data=!data:%search2%=%replace2%!  
        
        echo %data%>>%temp_file%
    )    
    move %temp_file% %%z
)
 
rem Удаляем временный файл
if exist %temp_file% del %temp_file%
 
exit /B
 
:wrongparams
Echo Wrong input
Echo Please, enter parameters, like:
Echo %~nx0 [Path] [ProjectName] [Bundle]
Echo.
exit /B
 
:dirnotexists
echo. Destination dir %1 not exists
exit /B
Но этот файл при копировании не то что не заменяется, а даже портится.
Windows Batch file
1
2
3
qdqw-{$BUNDLE}-dqwd
qdqw-{$BUNDLE}-dqwd
qdqw-{$BUNDLE}-dqwd
Что я делаю не так?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2017, 13:37
Ответы с готовыми решениями:

Копирование файлов с заменой
Требуется скопировать файлы из одной директории в другую. Если имена файлов совпадают, то оставить только тот файл, который создан позже....

Поиск и копирование файлов с заменой дубликатов
Добрый день! По работе понадобилось сделать BAT-файл, который просматривает сетевую директорию "\\serv\dir\" и ищет там файлы...

Копирование с переименованием и заменой файлов в каталоге назначения
Господа, добрый день. Прошу помочь в решении задачки, что то не получается её победить :( Необходимо произвести копирование файлов из...

7
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
21.10.2017, 14:03
Code
1
2
файл           парам1        парам2           парам3
create.bat     to            MyProject         Bundle
Цитата Сообщение от NETClient Посмотреть сообщение
if "%~1"=="" (Call :wrongparams& Exit /B)
if "%~2"=="" (Call :wrongparams& Exit /B)
if "%~3"=="" (Call :wrongparams& Exit /B)
т.е если есть хоть один параметр, переход на метку :wrongparams невозможен -
0
3 / 3 / 0
Регистрация: 28.05.2011
Сообщений: 18
21.10.2017, 14:24  [ТС]
Если запускаю так, то выбрасывает на wrongparams
Windows Batch file
1
create.bat to
0
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
21.10.2017, 14:38
А в 21 строчке команда xcopy неправильно оформлена.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
21.10.2017, 14:40
пишите вначале
if not "%~3"=="" if not "%~2"=="" if not "%~1"=="" call :метка
или
if not "%*"=="" call :метка

потом задавайте переменные
потом переход на метку - метка
потом код
0
 Аватар для volodin661
6686 / 2278 / 347
Регистрация: 10.12.2013
Сообщений: 7,871
21.10.2017, 18:37
Структура одним движением запаковывается в архив,
вторым движением распаковывается в нужное место.

Работы производятся в среде powershell,
поэтому $template-переменные разворачиваются самым естеств. образом по
PowerShell
1
2
3
4
$Project = "MyNewProject"
$Bundle = "NewBundle"
$expanded = $ExecutionContext.InvokeCommand.ExpandString((Get-Content file.txt))
echo $expanded > file.txt
0
3 / 3 / 0
Регистрация: 28.05.2011
Сообщений: 18
21.10.2017, 19:06  [ТС]
А что не так с xcopy?

Добавлено через 1 минуту
alpap, ладно, с проверкой параметров - сделаю. А как быть непосредственно с заменой?
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
21.10.2017, 20:30
NETClient,
посмотрите эту тему, там несколько вариантов раскрытия переменных, переданных в строке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2017, 20:30
Помогаю со студенческими работами здесь

CMD. Копирование файлов в цикле с заменой символов в имени
Всем привет. Почта уверен что уже было много раз. Пока ничего не нашел. Прошу помощи. Есть папка С:\Папка1\ В ней лежат...

Копирование файла из одной папки в другую с заменой по сети
Доброго времени суток. Сам того не желая столкнулся с проблемой. Будучи мало знаком с языками программирования, мне нужно написать...

Копирование всех файлов с заменой на более свежие по дате создания
Ну весь вопрос в теме, как скопировать все файлы знаю, а как поработать при замене с датой создания файлов? Как их сравнить?

Копирование папки с использованием команды XCOPY с заменой одноимённых файлов в папке назначения
Всем привет как сделать написать бат который копировал бы папки с заменой файлов внутри папки я написал так и добавил в планировщик...

Копирование файла с заменой
Здравствуйте друзья. Копирую архивный файл DUMP_B07.rar на сетевую папку. Хочу чтоб этот архив был там в одном экземпляре со...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru