@echo off del tmp?.txt 2>nul rem ======================================================================================================== rem Вытаскиваем информацию из реестра, с помощью программы regedit, в файл temp1.txt regedit /ea temp1.txt HKEY_CURRENT_USER\Software\Borland\Delphi\7.0\Library rem Первые 3 строчки нам не нужны, поэтому переписываем содержимое temp1.txt в temp2.txt, пропустив эти строчки more +3 temp1.txt>temp2.txt rem Теперь у нас есть одна длинная строка, которую нам надо разбить на кусочки. rem Для этого - заменяем все символы ";", которые отделяют разные пути, на два rem символа: "возврат каретки" и "новая строка" (в Windows именно так указывается rem переход на новую строку). gsar -s; -r:013:010 -f temp2.txt temp1.txt >nul rem В файле temp2.txt все символы "\" удвоены - заменяем их на единичные. gsar -s\\ -r\ -f temp1.txt temp2.txt >nul rem Находим первую строчку и заносим ее в переменную tempVar1 for /f "tokens=*" %%a in ('type temp2.txt ^| find "Search Path"') do set "tempVar1=%%a" rem Вырезаем из переменной первые 15 символов ("Search Path"=") - они нам не нужны set "tempVar1=%tempVar1:~15%" rem Записываем первую строчку из переменной tempVar1 в файл temp1.txt echo %tempVar1%>temp1.txt rem Переписываем все, кроме первой строки из temp2.txt в temp1.txt more +1 temp2.txt>>temp1.txt rem В переменной lines будет общее число строк в temp1.txt set "lines=0" rem Подсчитываем число строк for /f "tokens=*" %%a in (temp1.txt) do set /a "lines+=1" rem Теперь у нас есть все, что нам надо для дальнейшей работы rem =========================================================================== Echo ******* Building ******* if exist .cfg ren .cfg .cf~ if exist DCC32.cfg ren DCC32.cfg DCC32.cf~ rem # Make console target, unless overridden later echo -$A8 >> DCC32.cfg echo -$B- >> DCC32.cfg echo -$C+ >> DCC32.cfg echo -$D+ >> DCC32.cfg echo -$E->> DCC32.cfg echo -$F- >> DCC32.cfg echo -$G+ >> DCC32.cfg echo -$H+ >> DCC32.cfg echo -$I+ >> DCC32.cfg echo -$J- >> DCC32.cfg echo -$K- >> DCC32.cfg echo -$L+ >> DCC32.cfg echo -$M- >> DCC32.cfg echo -$N+ >> DCC32.cfg echo -$O+ >> DCC32.cfg echo -$P+ >> DCC32.cfg echo -$Q- >> DCC32.cfg echo -$R- >> DCC32.cfg echo -$S- >> DCC32.cfg echo -$T- >> DCC32.cfg echo -$U- >> DCC32.cfg echo -$V+ >> DCC32.cfg echo -$W- >> DCC32.cfg echo -$X+ >> DCC32.cfg echo -$YD >> DCC32.cfg echo -$Z1 >> DCC32.cfg echo -GD >> DCC32.cfg echo -cg >> DCC32.cfg echo -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; >> DCC32.cfg echo -H+ >> DCC32.cfg echo -W+ >> DCC32.cfg echo -M >> DCC32.cfg rem # Min/MaxStackSize echo -M16384,1048576 >> DCC32.cfg rem # ImageBase echo -K$00400000 >> DCC32.cfg echo -LE"c:\program files\borland\delphi7\Projects\bpl" >> DCC32.cfg echo -LN"c:\program files\borland\delphi7\Projects\Bpl" >> DCC32.cfg echo -DEUREKALOG;EUREKALOG_VER6 >> DCC32.cfg rem # Packages echo -LUvcl;vclx >> DCC32.cfg rem # SearchPath rem Записываем "-U" в файл DCC32.cfg без перевода строки - то есть следующая запись rem будет производится на этой же строке, без каких-либо пробелов. rem Использование этой конструкции, в официальных источниках не описано. set /p=-U<nul>>DCC32.cfg rem Вызываем блок записи всего пути в файл DCC32.cfg, одной строкой call :writeSearchPath DCC32.cfg rem Переходом на следующую строку в файле DCC32.cfg echo.>>DCC32.cfg rem # SearchPath set /p=-R<nul>>DCC32.cfg call :writeSearchPath DCC32.cfg echo.>>DCC32.cfg rem # SearchPath set /p=-O<nul>>DCC32.cfg call :writeSearchPath DCC32.cfg echo.>>DCC32.cfg rem # SearchPath set /p=-I<nul>>DCC32.cfg call :writeSearchPath DCC32.cfg echo.>>DCC32.cfg rem # BuildAll echo -B >> DCC32.cfg "c:\Program Files\Borland\Delphi7\Bin\DCC32.EXE" *.dpr %1 %2 %3 %4 %5 %6 %7 %8 %9 if errorlevel 1 goto GotError goto Finish rem # Got an error. Wait for user input :GotError echo Error! pause :Finish del DCC32.cfg if exist DCC32.cf~ ren DCC32.cf~ DCC32.cfg if exist .cf~ ren .cf~ .cfg del temp?.txt 2>nul Echo ******* Done. ******* :End goto :EOF :writeSearchPath rem Включаем отложенное раскрытие заначения переменных setlocal enabledelayedexpansion set "count=1" rem Хм... не помню, почему я ввел эту строчку :-) set /p=""<nul>>"%~1%" rem Идем по всем строчкам из файла temp1.txt и записываем их в DCC32.cfg через rem знак ";" - все на одной строке for /f "tokens=*" %%a in (temp1.txt) do ( rem Добавляем ";" в конез строки и вносим ее (строку) в переменную sp) set "sp=%%a;" rem Если это первая строчка - добавляем кавычку первым символом if !count!==1 set "sp="""!sp!" rem Если последняя строка - убираем ";" в конце if !count!==!lines! set "sp=!sp:~0,-1!" rem Пишем строку в файл set /p=!sp!<nul>>"%~1%" rem Увеличиваем счетчик строк, чтобы поймать последнюю строку set /a count+=1 ) |