|
本帖最后由 kcyou 于 2013-8-8 01:03 编辑
如果安装了pe,再选1安装时第一项卸载PE后重新安装,不起作用,只是和第2项一样卸载了。我修改了一下,干脆删掉这个选项,而是直接卸载,并且不在NT6系统建立BOOT.INI文件,而是修改BCD文件添加PELDR.MBR启动项,对于系统引导文件BCD等在隐藏分区的情况,应该也可以识别,待测试。
对于NT5系统的安装和卸载我没做修改。
此安装程序需增加bcdedit.exe文件。
下载供测试、参考:
WINPEINST.7z
(191.94 KB, 下载次数: 11)
------------------------------------------------------------
@echo off
pushd %~dp0
color 0b
set prog=WINPE专用安装程序
set l1= ╭══════════════════╮
set l2= ╭══┤ Windows PE 专用安装程序 ├══╮
set l3= ║ ╰══════════════════╯ ║
set l4= ║ ║
set l5= ╟════════════════════════╢
set l6= ║ 版权所有 盗版不究 ║
set l7= ╰────────────────────────╯
title %prog%
set pefile=PE.ISO
set logfile=peinstall.log
set addattr=attrib +h
set delattr=attrib -s -h -r
:checkos
if /i not "%os%."=="windows_nt." goto systemerro
::判断系统版本并设置theos
ver|find /i " 6.1">nul &&set winver=win7&& set theos=win7
ver|find /i " 6.0">nul &&set winver=vista&& set theos=vista
ver|find /i " 5.0">nul &&set winver=winnt&& set theos=2000
ver|find /i " 5.1">nul &&set winver=winnt&& set theos=xp
ver|find /i " 5.2">nul &&set winver=winnt&& set theos=2003
goto start
:systemerro
cls
echo.
echo.
echo 注意:未经测试,本软件可能不适用于非 windows pe/2000/xp/2003/vista/win7 操作系统。
echo 按回车键退出安装程序
pause >nul
exit
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:start
cls
title %prog%——安装
echo.
echo %l1%
echo %l2%
echo %l3%
echo %l4%
echo ║ 请选择安装方式: ║
echo %l4%
echo ║ [1] 普通安装/启动 (硬 盘 安 装) ║
echo ║ ║
echo ║ [2] 卸载WINPE 程序 ║
echo ║ ║
echo ║ [q] 退出安装 ║
echo %l5%
echo %l6%
echo %l7%
echo.
echo 您现在使用的是 windows %theos% 操作系统 !
echo.
if "%theos%"=="xp" echo ( 或 windows xp 核心的 winpe )
if "%theos%"=="2003" echo ( 或 windows 2003 核心的 winpe )
if "%theos%"=="vista" echo ( 请确保您拥有管理员权限以及关闭了uac,否则安装可能失败 )
if "%theos%"=="win7" echo ( 请确保您拥有管理员权限以及关闭了uac,否则安装可能失败 )
echo.
::set choice=
set /p choice= 请选择要进行的操作 (1/2/q) ,然后按回车:
if "%choice%"=="" goto start
if not "%choice%"=="" set choice=%choice:~0,1%
if /i "%choice%"=="1" goto hd
if /i "%choice%"=="2" goto uninstall
if /i "%choice%"=="q" exit
goto start
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:hd
set rp=
For %%I In (Z Y X W V U T S R Q P O N M L K J I H G F E D C) Do If Exist %%I:\NTDETECT.COM Set RP=%%I:
For %%I In (Z Y X W V U T S R Q P O N M L K J I H G F E D C) Do If Exist %%I:\bootmgr Set RP=%%I:
set pedir=%rp%\%pefile%
if exist %pedir% goto err1
if /i "%theos%"=="vista" (goto nt6_install) else (if /i "%theos%"=="win7" (goto nt6_install) else (goto nt5_install))
goto hd
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:err1
cls
title %prog%——卸载
echo.
echo %l1%
echo %l2%
echo %l3%
echo %l4%
echo ║ 您的硬盘中好像已经安装了 winpe,您想怎么办? ║
echo %l4%
echo ║ [1] 卸载原有的 WINPE。 ║
echo ║ [2] 返回首页,重新选择安装选项。 ║
echo ║ [q] 退出安装 ║
echo %l5%
echo %l6%
echo %l7%
echo.
set choice=
set /p choice= 请选择要进行的操作 (1/2/q) ,然后按回车:
if "%choice%"=="" goto err1
if not "%choice%"=="" set choice=%choice:~0,1%
if /i "%choice%"=="1" goto uninstall
if /i "%choice%"=="2" goto start
if /i "%choice%"=="q" exit
goto err1
exit
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:uninstall
set rp=
For %%I In (Z Y X W V U T S R Q P O N M L K J I H G F E D C) Do If Exist %%I:\NTDETECT.COM Set RP=%%I:
For %%I In (Z Y X W V U T S R Q P O N M L K J I H G F E D C) Do If Exist %%I:\bootmgr Set RP=%%I:
if exist %rp%\%logfile% for /f "eol=; tokens=2 delims=^=" %%i in ('find /i ^"winpe外挂位置^" %rp%\%logfile%') do set opd=%%i
if not "%u%"=="" set opd=%rp%
if exist %rp%\%pefile% %delattr% %rp%\%pefile%&&del %rp%\%pefile% /q>nul 2>nul
if exist %rp%\peldr %delattr% %rp%\peldr&&del %rp%\peldr /q>nul 2>nul
if exist %rp%\%logfile% %delattr% %rp%\%logfile%&&del %rp%\%logfile% /q>nul 2>nul
if exist %rp%\PE.ISO %delattr% %rp%\PE.ISO&&del %rp%\PE.ISO /q>nul 2>nul
if exist %rp%\peldr.mbr %delattr% %rp%\peldr.mbr&&del %rp%\peldr.mbr /q>nul 2>nul
echo.
set vid=
set timeout=5
if exist %rp%\Bcd_Backup bcdedit /import "%rp%\Bcd_Backup" >nul&& goto 1
if not exist %rp%\vid.ini (
echo.
echo 因相关文件被删,不能自动删除启动项项目,只能手动删除。
echo.
pause
goto exit
)
for,/f,"tokens=1",%%i,In (%rp%\vid.ini) Do (
set vid=%%i
)
bcdedit /delete %vid% /cleanup >nul
bcdedit /timeout %timeout% >nul
:1
if exist %rp%\vid.ini %delattr% %rp%\vid.ini&&del %rp%\vid.ini /q>nul 2>nul
if exist %rp%\Bcd_Backup %delattr% %rp%\Bcd_Backup&&del %rp%\Bcd_Backup /q>nul 2>nul
if exist %rp%\Bcd_Backup.LOG %delattr% %rp%\Bcd_Backup.LOG&&del %rp%\Bcd_Backup.LOG /q>nul 2>nul
:exit
if exist %rp%\boot.bak (
%delattr% %rp%\boot.bak
type %rp%\boot.bak|find /i /v "%rp%\minipe">%rp%\boot.ini
) else (
if exist %rp%\boot.ini copy %rp%\boot.ini %rp%\boot.bak /y>nul 2>nul
if exist %rp%\boot.bak type %rp%\boot.bak|find /i /v "c:\minipe">%rp%\boot.ini
)
if exist %rp%\boot.bak %delattr% %rp%\boot.bak&&del %rp%\boot.bak>nul 2>nul
if exist %rp%\boot.ini %addattr% %rp%\boot.ini >nul 2>nul
set rp=
title %prog%——卸载完成
echo.&&echo.&&echo 卸载完成,请按任意键退出 。。。
pause>nul 2>nul
exit
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:nt6_install
title %prog%——安装到NT6x系统下
echo.
echo 请以管理员身份运行。
if "%op%"=="" call :setextra
echo.
echo 正在复制文件,请稍等...
echo.
copy peldr %rp%\peldr /y>nul 2>nul
copy peldr.mbr %rp%\peldr.mbr /y>nul 2>nul
copy PE.ISO %rp%\PE.ISO /y>nul 2>nul
md %rp%\temp_pe3
copy ..\read.txt %rp%\temp_pe3\read.txt /y>nul 2>nul
cls
echo.
set gname=Windows PE
set vid=
set timeout=5
bcdedit >%rp%\bcdtemp.txt
type %rp%\bcdtemp.txt | find "\peldr.mbr" >nul && echo. && echo BCD启动项中已有grub4dos的项目,无需再安装。&& pause && goto exit
bcdedit /export "%rp%\Bcd_Backup" >nul
bcdedit /create /d "%gname%" /application bootsector >%rp%\vid.ini
for,/f,"tokens=2 delims={",%%i,In (%rp%\vid.ini) Do (
set vida=%%i
)
for,/f,"tokens=1 delims=}",%%i,In ("%vida%") Do (
set vid={%%i}
)
echo %vid%>%rp%\vid.ini
bcdedit /set %vid% device partition=%systemdrive% >nul
bcdedit /set %vid% path \peldr.mbr >nul
bcdedit /displayorder %vid% /addlast >nul
bcdedit /timeout %timeout% >nul
echo.
:exit
del %rp%\bcdtemp.txt >nul
if exist %rp%\PE.ISO %addattr% %rp%\PE.ISO
if exist %rp%\peldr %addattr% %rp%\peldr
if exist %rp%\peldr.mbr %addattr% %rp%\peldr.mbr
if exist %rp%\temp_pe3 rd %rp%\temp_pe3 /s /q>nul 2>nul
if "%u%"=="" call :pelog
if exist %rp%\Bcd_Backup %addattr% %rp%\Bcd_Backup
if exist %rp%\vid.ini %addattr% %rp%\vid.ini
goto success
:nt5_install
title %prog%——安装到NT5x系统下
if "%op%"=="" call :setextra
echo.
echo 正在复制文件,,请稍等...
copy peldr %rp%\peldr /y>nul 2>nul
copy PE.ISO %rp%\PE.ISO /y>nul 2>nul
md %rp%\temp_pe3
copy ..\read.txt %rp%\temp_pe3\read.txt /y>nul 2>nul
cls
echo.
if exist %rp%\boot.ini %delattr% %rp%\boot.ini
if exist %rp%\boot.ini if exist %rp%\boot.bak %delattr% %rp%\boot.bak
if exist %rp%\boot.ini copy %rp%\boot.ini %rp%\boot.bak>nul 2>nul
if exist %rp%\boot.ini echo %rp%\peldr="WINPE">>%rp%\boot.ini
if exist %rp%\PE.ISO %addattr% %rp%\PE.ISO
if exist %rp%\peldr %addattr% %rp%\peldr
if exist %rp%\boot.ini %addattr% %rp%\boot.ini
if exist %rp%\boot.bak %addattr% %rp%\boot.bak
if exist %rp%\temp_pe3 rd %rp%\temp_pe3 /s /q>nul 2>nul
if "%u%"=="" call :pelog
goto success
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:success
title %prog%——安装完成
cls
echo.
echo 已经成功将 winpe 安装到您的本地硬盘。
echo.
echo.&&echo.
echo 如果您需要将 winpe 卸载,请重新运行本安装程序。
echo.
echo 请按任意键退出......
pause>nul 2>nul
exit
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:setextra
cls
if "%noop%"=="yes" echo 错误:您设定的分区不存在或写保护,请按任意键重新设定。&&echo.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:pelog
>%rp%\%logfile% cd.
>>%rp%\%logfile% echo ;此文件为 winpe 的安装logfile,请不要随意删除
>>%rp%\%logfile% echo ;否则可能会造成 winpe 的卸载不够彻底!!!
>>%rp%\%logfile% echo.
>>%rp%\%logfile% echo winpe镜像文件=%pefile%
>>%rp%\%logfile% echo winpe安装日期=%date% %time%
%addattr% %rp%\%logfile%
goto :eof
|
|