Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Скопировать bat файлы изменив в них текст, взятый их txt документа (http://forum.oszone.net/showthread.php?t=311590)

Alexander_88 15-02-2016 07:39 2606184

Скопировать bat файлы изменив в них текст, взятый их txt документа
 
Здравствуйте, подскажите, пожалуйста, как решить следующую задачку:

Есть bat файл. Необходимо скопировать его столько раз, сколько строчек содержит файл replace.txt. В каждом новом, копированном bat файле, нужно заменить фразу (которую я укажу), на фразу, которая находится в txt файле replace.txt (каждая фраза для каждого копированного файла с новой строки). Заменять необходимо все фразы, которые нашлись в исходном файле на фразу в строчке файла replace.txt
Также необходимо дать имя каждому копированному файлу... его имя нужно также получить из замены... нужно взять оригинальное имя файла и заменить в нем фразу, которую я уже указывал, на ту, которая в тхт файле replace.txt (каждая фраза для каждого копированного файла с новой строки)

Пример:

Оригинальный файл с содержанием:
moy start.bat

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=start.txt
set sDestFile="C:\OneDrive\work\GENERATOR\start.txt"

if defined sSourceFile (

файл replace.txt с заменами:

Код:

finish
red sofa
big room

В скрипте указываем фразу замены start
После выполнения скрипта должны появиться следующие 3 файла со следующим содержимым:

moy finish.bat

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=finish.txt
set sDestFile="C:\OneDrive\work\GENERATOR\finish.txt"

if defined sSourceFile (


moy red sofa.bat

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=red sofa.txt
set sDestFile="C:\OneDrive\work\GENERATOR\red sofa.txt"

if defined sSourceFile (


moy big room.bat

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=big room.txt
set sDestFile="C:\OneDrive\work\GENERATOR\big room.txt"

if defined sSourceFile (

:)

Elven 15-02-2016 13:20 2606254

проще всего так
Код:

for /f "delims=" %%i in (replace.txt) do (

echo @echo off >>%%i.cmd
echo setlocal enableextensions enabledelayedexpansion >>%%i.cmd

echo set sSourceFile=%%i.txt >>%%i.cmd
echo set sDestFile="C:\OneDrive\work\GENERATOR\%%i.txt" >>%%i.cmd

echo if defined sSourceFile ( >>%%i.cmd
)

если нужно именно брать данные из одного файла и подставлять в другой то будет несколько сложнее. Как я понимаю start.bat приведен не полностью, в приведенном куске ничего экранировать не пришлось, посему тут все почти без изменений, но если будут встречаться с теле cmd символы которые echo воспримет как параметр - возникнут грабли.

Alexander_88 15-02-2016 14:26 2606273

спасибо, проверил вариант, работает, надо будет еще на других батах протестировать :)


Время: 06:10.

Время: 06:10.
© OSzone.net 2001-