1

Мне нужно создать командный файл, который добавляет текст в последнюю строку в файле 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

Могу ли я сделать это с командным файлом? Есть еще один способ сделать это?

Благодарю.

8 ответов8

0

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

эхо "блабла" >> c:\boot.ini

0

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

0

Вы можете сделать это с помощью следующего обходного пути:

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

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

0

Я бы, наверное, использовал 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

Щелкните правой кнопкой мыши на моем компьютере, выберите свойства. Перейдите на вкладку «Дополнительно», а затем в разделе «Запуск и восстановление» выберите «Настройки». На следующем экране в разделе «Запуск системы» нажмите «Изменить». Откроется файл Boot.ini с помощью Блокнота, чтобы вы могли добавить эти и другие параметры или внести другие изменения.

0

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

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

Ну, 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

Для редактирования boot.ini вы можете попробовать:

run>sysdm.cpl

На вкладке «Дополнительно» нажмите «Настройки», а затем «Изменить». Это откроет boot.ini в текстовом редакторе (Блокнот в моем случае). Внесите изменения и сохраните (предварительно сохранив копию оригинала на всякий случай!).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .