Добавьте опцию к boot.ini с пакетом

Я должен создать пакетный файл, который добавляет текст к последней строке в файле boot.ini, например, последняя строка моего boot.ini:

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

я должен добавить/bootlogo/noguiboot опция, поэтому строка boot.ini должна быть изменена в:

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /bootlogo /noguiboot

Я могу сделать это с пакетным файлом? Существует другой способ сделать это?

Спасибо.

1
задан 24.10.2014, 11:46

7 ответов

Я нашел решение:

attrib -r -s -h %SystemDrive%\boot.ini
gsar.exe -o -i -s:032:047bootlogo:032:047noguiboot -r %SystemDrive%\boot.ini
gsar.exe -o -sfastdetect -rfastdetect:032:047bootlogo:032:047noguiboot %SystemDrive%\boot.ini
attrib +r +s +h %SystemDrive%\boot.ini
0
ответ дан 24.11.2019, 01:40

Не знайте, понимаю ли я Ваш вопрос, но добавление, что строка довольно легка:

повторите "blabla">> c:\boot.ini

0
ответ дан 24.11.2019, 01:40

Я не уверен, что можно сделать это с ванильной командной строкой WinXP. Попробуйте бесплатное программное обеспечение GPatch.

0
ответ дан 24.11.2019, 01:40

Я, вероятно, использовал бы SED для этого:

@echo off
cd /d c:\
attrib -r -h -s boot.ini
sed -e "s/fastdetect$/fastdetect \/bootlogo \/noguiboot/" boot.ini > boot.$$$
ren boot.ini boot.old
ren boot.$$$ boot.ini
attrib +r +h +s boot.ini

SED доступно как часть GnuWin, или можно найти автономную версию здесь. Кроме того, поскольку я записал это, SED выше сделает замену относительно всех строк, заканчивающихся 'fastboot'. Вы могли сделать строку поиска дольше, чтобы гарантировать, что Вы воздействуете только на одну определенную строку.

0
ответ дан 24.11.2019, 01:40

Щелкните правой кнопкой по моему компьютеру, выберите свойства. Нажмите Вкладку "Дополнительно" и затем при ЗАПУСКЕ и ВОССТАНОВЛЕНИИ, выберите Настройки. На следующем экране при Системном Запуске нажмите Edit. Это открывает файл Boot.ini с Блокнотом, чтобы позволить Вам добавлять эти и другие переключатели или вносить другие изменения.

0
ответ дан 24.11.2019, 01:40

Можно сделать это со следующим обходным решением:

set rand=%RANDOM%
echo /bootlogo /noguiboot > %TEMP%\%rand%.txt
attrib -R -S -H C:\boot.ini
copy C:\boot.ini+%TEMP%\%rand%.txt C:\boot.ini
attrib +R +S +H C:\boot.ini
del %TEMP%\%rand%.txt

В основном это создает временный файл, echos Ваши данные в конец его, затем использует copy конкатенировать C:\boot.ini с временным файлом.

0
ответ дан 24.11.2019, 01:40

Ну, boot.ini является системным файлом. Прежде, чем изменить это, необходимо удалить тот атрибут.

Считайте и попробуйте мое решение. Это ищет все параметры загрузки Windows, что папку называют WINDOWS (весь верхний регистр) в boot.ini. Затем это воссоздает boot.ini соответственно Ваш выбор - чтобы добавить или удалить "/bootlogo/noguiboot" - для каждого параметра загрузки Windows.

@echo off
SETLOCAL EnableDelayedExpansion

echo.This batch is an editor for all Windows boot options in boot.ini.
echo.- Limitations: works only with 8 parameters and detects only Windows instalations with folders named "WINDOWS" - all uppercased
echo.

::save the current path
set pathbak=%cd%
for /f "tokens=1* delims=:" %%a in ("%pathbak%") do (
  set drvbak=%%a
)

::put bellow the drive where boot.ini is
c:
cd \

::remove system and hidden attributes from boot.ini
attrib -r -s -h boot.ini

::create new file
echo.>boot.new

::read boot.ini
for /f "tokens=1* delims=\" %%a in (boot.ini) do (
  if "%%b"=="" (
    echo.%%a>>boot.new
  )
  for /f "tokens=1* delims==" %%c in ("%%b") do (
    ::find Windows boot options
    if "%%c" neq "WINDOWS" (
      echo.%%a\%%b>>boot.new
    ) else (
      if "%%b"=="WINDOWS" (
        echo.%%a\%%b>>boot.new
      ) else (
        ::split parameters
        for /f "tokens=1,2,3,4,5,6,7,8* delims=/" %%e in ("%%d") do (
          ::remove spaces after strings
          for /f "delims= " %%n in ("%%a") do set __a=%%n
          for /f "delims= " %%n in ("%%c") do set __c=%%n
          for /f "delims=" %%n in ("%%e") do set __e=%%n
          for /f "delims= " %%n in ("%%f") do set __f=%%n
          for /f "delims= " %%n in ("%%g") do set __g=%%n
          for /f "delims= " %%n in ("%%h") do set __h=%%n
          for /f "delims= " %%n in ("%%i") do set __i=%%n
          for /f "delims= " %%n in ("%%j") do set __j=%%n
          for /f "delims= " %%n in ("%%k") do set __k=%%n
          for /f "delims= " %%n in ("%%l") do set __l=%%n
          for /f "delims= " %%n in ("%%m") do set __m=%%n

          echo.Found a WINDOWS boot option in partition "!__a!":
          echo.- text seen on boot: !__e!
          if "!__f!" neq "" (
            echo.- parameter 1: /!__f!
          ) else (
            echo.- parameter 1:
          )
          if "!__g!" neq "" (
            echo.- parameter 2: /!__g!
          ) else (
            echo.- parameter 2:
          )
          if "!__h!" neq "" (
            echo.- parameter 3: /!__h!
          ) else (
            echo.- parameter 3:
          )
          if "!__i!" neq "" (
            echo.- parameter 4: /!__i!
          ) else (
            echo.- parameter 4:
          )
          if "!__j!" neq "" (
            echo.- parameter 5: /!__j!
          ) else (
            echo.- parameter 5:
          )
          if "!__k!" neq "" (
            echo.- parameter 6: /!__k!
          ) else (
            echo.- parameter 6:
          )
          if "!__l!" neq "" (
            echo.- parameter 7: /!__l!
          ) else (
            echo.- parameter 7:
          )
          if "!__m!" neq "" (
            echo.- parameter 8: /!__m!
          ) else (
            echo.- parameter 8:
          )
          echo.
          set bootlogo=0
          if "!__f!"=="bootlogo" set bootlogo=1
          if "!__g!"=="bootlogo" set bootlogo=1
          if "!__h!"=="bootlogo" set bootlogo=1
          if "!__i!"=="bootlogo" set bootlogo=1
          if "!__j!"=="bootlogo" set bootlogo=1
          if "!__k!"=="bootlogo" set bootlogo=1
          if "!__l!"=="bootlogo" set bootlogo=1
          if "!__m!"=="bootlogo" set bootlogo=1
          set noguiboot=0
          if "!__f!"=="noguiboot" set noguiboot=1
          if "!__g!"=="noguiboot" set noguiboot=1
          if "!__h!"=="noguiboot" set noguiboot=1
          if "!__i!"=="noguiboot" set noguiboot=1
          if "!__j!"=="noguiboot" set noguiboot=1
          if "!__k!"=="noguiboot" set noguiboot=1
          if "!__l!"=="noguiboot" set noguiboot=1
          if "!__m!"=="noguiboot" set noguiboot=1
          set /a bootlogonoguiboot=!bootlogo!+!noguiboot!
          if "!bootlogonoguiboot!"=="2" (
            echo.Do you want to remove /bootlogo /noguiboot parameters for that Windows boot option [y or n]?
            set /p choice1=
            if "!choice1!"=="y" (
              set newoption=!__a!\!__c!=!__e!
              if "!__f!" neq "" if "!__f!" neq "bootlogo" if "!__f!" neq "noguiboot" set newoption=!newoption! /!__f!
              if "!__g!" neq "" if "!__g!" neq "bootlogo" if "!__g!" neq "noguiboot" set newoption=!newoption! /!__g!
              if "!__h!" neq "" if "!__h!" neq "bootlogo" if "!__h!" neq "noguiboot" set newoption=!newoption! /!__h!
              if "!__i!" neq "" if "!__i!" neq "bootlogo" if "!__i!" neq "noguiboot" set newoption=!newoption! /!__i!
              if "!__j!" neq "" if "!__j!" neq "bootlogo" if "!__j!" neq "noguiboot" set newoption=!newoption! /!__j!
              if "!__k!" neq "" if "!__k!" neq "bootlogo" if "!__k!" neq "noguiboot" set newoption=!newoption! /!__k!
              if "!__l!" neq "" if "!__l!" neq "bootlogo" if "!__l!" neq "noguiboot" set newoption=!newoption! /!__l!
              if "!__m!" neq "" if "!__m!" neq "bootlogo" if "!__m!" neq "noguiboot" set newoption=!newoption! /!__m!
              echo.!newoption!>>boot.new
            ) else (
              echo.%%a\%%b>>boot.new
            )
            set choice1=
          ) else (
            if "!bootlogonoguiboot!" neq "2" echo.Do you want to add /bootlogo /noguiboot parameters for that Windows boot option [y or n]?
            (
              set /p choice1=
              if "!choice1!"=="y" (
                set newoption=!__a!\!__c!=!__e!
                if "!__f!" neq "" if "!__f!" neq "bootlogo" if "!__f!" neq "noguiboot" set newoption=!newoption! /!__f!
                if "!__g!" neq "" if "!__g!" neq "bootlogo" if "!__g!" neq "noguiboot" set newoption=!newoption! /!__g!
                if "!__h!" neq "" if "!__h!" neq "bootlogo" if "!__h!" neq "noguiboot" set newoption=!newoption! /!__h!
                if "!__i!" neq "" if "!__i!" neq "bootlogo" if "!__i!" neq "noguiboot" set newoption=!newoption! /!__i!
                if "!__j!" neq "" if "!__j!" neq "bootlogo" if "!__j!" neq "noguiboot" set newoption=!newoption! /!__j!
                if "!__k!" neq "" if "!__k!" neq "bootlogo" if "!__k!" neq "noguiboot" set newoption=!newoption! /!__k!
                if "!__l!" neq "" if "!__l!" neq "bootlogo" if "!__l!" neq "noguiboot" set newoption=!newoption! /!__l!
                if "!__m!" neq "" if "!__m!" neq "bootlogo" if "!__m!" neq "noguiboot" set newoption=!newoption! /!__m!
                set newoption=!newoption! /bootlogo /noguiboot
                echo.!newoption!>>boot.new
              ) else (
                echo.%%a\%%b>>boot.new
              )
              set choice1=
            )
          )
        )
      )
    )
  )
)

cls
echo......................
type boot.new
echo......................

::replace current boot.ini
copy boot.ini boot.bak.%random%
copy boot.new boot.ini

::restore system and hidden attributes
attrib +r +s +h boot.ini

::restore previous path
%drvbak%:
cd %pathbak%
0
ответ дан 24.11.2019, 01:40

Теги

Похожие вопросы