Автор: Elroir
Дата сообщения: 13.11.2008 01:55
Kilyan
1. Пробуем заменить "more +3 temp1.txt>temp2.txt" на "more +3 < temp1.txt > temp2.txt"
2. [more]
Код:
@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
)