Я должен создать пакетный файл, который добавляет текст к последней строке в файле 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
Я могу сделать это с пакетным файлом? Существует другой способ сделать это?
Спасибо.
Я нашел решение:
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
Я, вероятно, использовал бы 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'. Вы могли сделать строку поиска дольше, чтобы гарантировать, что Вы воздействуете только на одну определенную строку.
Щелкните правой кнопкой по моему компьютеру, выберите свойства. Нажмите Вкладку "Дополнительно" и затем при ЗАПУСКЕ и ВОССТАНОВЛЕНИИ, выберите Настройки. На следующем экране при Системном Запуске нажмите Edit. Это открывает файл Boot.ini с Блокнотом, чтобы позволить Вам добавлять эти и другие переключатели или вносить другие изменения.
Можно сделать это со следующим обходным решением:
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
с временным файлом.
Ну, 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%