![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-02 03:34 |
共 48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,250 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 问个文字替换的问题 |
| 可打印版本 2,947 / 23 |
| 第16楼 tclshx | 发表于 2006-09-19 06:07 |
| 中级用户 发帖 64 积分 249 | |
Originally posted by qwe1234567 at 2006-9-19 04:48 AM: @echo OFF REM 此批处理要和XCOPY.EXE等DOS文件同放在根目录中的一个文件夹内,此批处理适用于老九 的64M_XPE的散安装,若用于其它安装,可作适当修改. Title=安装XPE硬盘版 :begin cls COLOR 2F echo. echo. echo XPE硬盘安装版 echo ============================================== echo. echo 即将安装“小型XPE 硬盘版”到您的系统! echo 本安装程序不会修改系统 MBR 及分区表等信息。 echo. Echo 请按任意键开始安装...... PAUSE >NUL CLS Set RP=RP For %%I In (C D E F G H I J K L M N O P Q R S T U V W X Y Z) Do If Exist %%I:\BOOT.INI Set RP=%%I If %RP%==RP Goto Exit FIND "Avldr.xpe" %RP%:\BOOT.INI >NUL If %Errorlevel%==0 Goto Err1 :Install If Exist %RP%:\AVLDR.XPE ATTRIB -S -H -R %RP%:\AVLDR.XPE If Exist %RP%:\LDRXPE ATTRIB -S -H -R %RP%:\LDRXPE Echo. Echo 正在复制文件,请稍候 ...... Copy ..\WIN51IP %RP%:\ >NUL 2>nul Copy ..\WIN51IP.SP2 %RP%:\ >NUL 2>nul Copy AVLDR.XPE %RP%:\ /Y>NUL Copy LDRXPE %RP%:\ /Y>NUL if not exist %RP%:\MININT\nul md %RP%:\MININT>NUL 2>nul xcopy /y /r /e /q /h ..\I386\*.* %RP%:\MININT\>NUL 2>nul cd %RP%:\>layout_.inf setlocal enabledelayedexpansion for /f "tokens=*" %%i in (%RP%:\MININT\INF\LAYOUT.INF) do ( set var=%%i set "var=!var:\i386=\MININT!" echo !var!>>layout_.inf ) Copy %RP%:\layout_.inf %RP%:\MININT\INF\LAYOUT.INF /Y>NUL Del %RP%:\layout_.inf /Q cd %RP%:\>PECONFIG_.INI setlocal enabledelayedexpansion for /f "tokens=*" %%i in (%RP%:\MININT\SYSTEM32\PECONFIG.INI) do ( set var=%%i set "var=!var:i386=MININT!" echo !var!>>PECONFIG_.INI ) Copy %RP%:\PECONFIG_.INI %RP%:\MININT\SYSTEM32\PECONFIG.INI /Y>NUL Del %RP%:\PECONFIG_.INI /Q ATTRIB -S -H -R %RP%:\BOOT.INI If Exist %RP%:\BOOT.BAK ( ATTRIB -S -H -R %RP%:\BOOT.BAK Del %RP%:\BOOT.BAK /Q ) Copy %RP%:\BOOT.INI %RP%:\BOOT.BAK>NUL TYPE %RP%:\BOOT.BAK|FIND /V "Avldr">%RP%:\BOOT.INI Echo %RP%:\Avldr.xpe="启动WinPE系统">>%RP%:\BOOT.INI if not exist %RP%:\PROGRAMS\nul md %RP%:\PROGRAMS>NUL 2>nul xcopy /y /e /q /h ..\PROGRAMS\*.* %RP%:\PROGRAMS\>NUL 2>nul ATTRIB +S +H +R %RP%:\AVLDR.XPE ATTRIB +S +H +R %RP%:\LDRXPE ATTRIB +S +H +R %RP%:\BOOT.INI ATTRIB +S +H +R %RP%:\BOOT.BAK ATTRIB +S +H +R %RP%:\WIN51IP ATTRIB +S +H +R %RP%:\WIN51IP.SP2 ATTRIB +S +H +R %RP%:\PROGRAMS /D /S ATTRIB +S +H +R %RP%:\MININT /D /S Goto SUCCESS :Err1 CLS Echo 好像你的机器中已经安装了 WinPE 了,请选择以下操作选项。 Echo. Echo 1.卸载原有的 WinPE,并且重新安装。 Echo 2.退出安装 Echo. Set Choice= Set /P Choice=请选择要进行的操作 (1/2) ,然后按回车: If Not '%Choice%'=='' SET Choice=%Choice:~0,1% CLS If /I '%Choice%'=='1' GOTO Install If /I '%Choice%'=='2' EXIT Goto Err1 :Exit CLS Echo 好像你的机器中没有安装操作系统哦,请确认后再执行本安装程序。 Echo. Echo 请按任意键退出...... PAUSE >NUL Exit :SUCCESS CLS Echo 已经成功将WinPE安装到你的 %RP%: 盘。 Echo. Echo 系统分区中的 BOOT.INI 备份为 BOOT.BAK。 Echo. Echo 请按任意键退出...... PAUSE >NUL Exit 以上是我的全部批处理内容,不将光盘内容做成ISO,而是解开在硬盘,运行这个批处理是可以的,一旦做成ISO用虚拟光盘来加载运行批处理时,就会出现拒绝访问的滚动提示.可能是要写东西在这个ISO中的原因,但我不会弄,再帮看一下. |
|
| 第17楼 namejm | 发表于 2006-09-19 06:34 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
请问:你的ISO文件里是不是有boot.ini文件?如果有的话,那就会运行不成功,原因在这一句上:For %%I In (C D E F G H I J K L M N O P Q R S T U V W X Y Z) Do If Exist %%I:\BOOT.INI Set RP=%%I 。
请注意,此for语句会把RP值设置为存在boot.ini文件的最后一个分区的盘符,而不是你想要的第一个。假设在你的ISO文件下存在boot.ini,那么,你把ISO文件加载到虚拟光盘中去之后,该虚拟光盘盘符下就存在了boot.ini,那么,RP的值就是该虚拟光盘的盘符了,你以后的很多操作都是针对RP展开的,所以会出现拒绝访问的提示了。 |
|
| 第18楼 tclshx | 发表于 2006-09-19 07:18 |
| 中级用户 发帖 64 积分 249 | |
Originally posted by namejm at 2006-9-19 06:34 AM: ISO里是没有BOOT.INI的 是以下语句的问题,我把这两个修改文件的语句去掉后就不会出"现拒绝访问"的提示了,但我对这种高难度的语句不懂. cd %RP%:\>layout_.inf setlocal enabledelayedexpansion for /f "tokens=*" %%i in (%RP%:\MININT\INF\LAYOUT.INF) do ( set var=%%i set "var=!var:\i386=\MININT!" echo !var!>>layout_.inf ) Copy %RP%:\layout_.inf %RP%:\MININT\INF\LAYOUT.INF /Y>NUL Del %RP%:\layout_.inf /Q cd %RP%:\>PECONFIG_.INI setlocal enabledelayedexpansion for /f "tokens=*" %%i in (%RP%:\MININT\SYSTEM32\PECONFIG.INI) do ( set var=%%i set "var=!var:i386=MININT!" echo !var!>>PECONFIG_.INI ) Copy %RP%:\PECONFIG_.INI %RP%:\MININT\SYSTEM32\PECONFIG.INI /Y>NUL Del %RP%:\PECONFIG_.INI /Q [ Last edited by tclshx on 2006-9-19 at 07:28 ] |
|
| 第19楼 tclshx | 发表于 2006-09-19 11:50 |
| 中级用户 发帖 64 积分 249 | |
|
我试过将修改文件的语句单独做成一个01.BAT,在主批处理中将它COPY到硬盘,目的是它可利用硬盘的写入功能,这样就可在主批处理中用CALL调用01.BAT,执行完01.BAT后又返回主批处理的下续语句,但结果还是不行,不知为什么.若将01.BAT放在硬盘(C盘)中单独运行又是好的,怪了!!
|
|
| 第20楼 namejm | 发表于 2006-09-19 11:55 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
呵呵,发现你copy代码的时候,写错了两处,一处是cd %RP%:\>layout_.inf,另一处是cd %RP%:\>PECONFIG_.INI,而我的原始代码中是cd.>layout_.inf和cd.>PECONFIG_.INI,这两句的意思是创建0字节的layout_.inf和PECONFIG_.INI,请注意 cd 之后紧跟着的是一个圆点。
[ Last edited by namejm on 2006-9-19 at 11:57 ] |
|
| 第21楼 tclshx | 发表于 2006-09-19 12:27 |
| 中级用户 发帖 64 积分 249 | |
|
以下的代码修改文件是原来未动的,做成ISO运行也不行.
@echo OFF REM 此批处理要和XCOPY.EXE等DOS文件同放在根目录中的一个文件夹内,此批处理适用于老九 的64M_XPE的散安装,若用于其它安装,可作适当修改. Title=安装XPE硬盘版 :begin cls COLOR 2F echo. echo. echo XPE硬盘安装版 echo ============================================== echo. echo 即将安装“小型XPE 硬盘版”到您的系统! echo 本安装程序不会修改系统 MBR 及分区表等信息。 echo. Echo 请按任意键开始安装...... PAUSE >NUL CLS Set RP=RP For %%I In (C D E F G H I J K L M N O P Q R S T U V W X Y Z) Do If Exist %%I:\BOOT.INI Set RP=%%I If %RP%==RP Goto Exit FIND "Avldr.xpe" %RP%:\BOOT.INI >NUL If %Errorlevel%==0 Goto Err1 :Install If Exist %RP%:\AVLDR.XPE ATTRIB -S -H -R %RP%:\AVLDR.XPE If Exist %RP%:\LDRXPE ATTRIB -S -H -R %RP%:\LDRXPE Echo. Echo 正在复制文件,请稍候 ...... Copy ..\WIN51IP %RP%:\ >NUL 2>nul Copy ..\WIN51IP.SP2 %RP%:\ >NUL 2>nul Copy AVLDR.XPE %RP%:\ /Y>NUL Copy LDRXPE %RP%:\ /Y>NUL if not exist %RP%:\MININT\nul md %RP%:\MININT>NUL 2>nul xcopy /y /r /e /q /h ..\I386\*.* %RP%:\MININT\>NUL 2>nul cd.>layout_.inf setlocal enabledelayedexpansion for /f "tokens=*" %%i in (%RP%:\MININT\INF\LAYOUT.INF) do ( set var=%%i set "var=!var:\i386=\MININT!" echo !var!>>layout_.inf ) cd.>PECONFIG_.INI setlocal enabledelayedexpansion for /f "tokens=*" %%i in (%RP%:\MININT\SYSTEM32\PECONFIG.INI) do ( set var=%%i set "var=!var:i386=MININT!" echo !var!>>PECONFIG_.INI ) ATTRIB -S -H -R %RP%:\BOOT.INI If Exist %RP%:\BOOT.BAK ( ATTRIB -S -H -R %RP%:\BOOT.BAK Del %RP%:\BOOT.BAK /Q ) Copy %RP%:\BOOT.INI %RP%:\BOOT.BAK>NUL TYPE %RP%:\BOOT.BAK|FIND /V "Avldr">%RP%:\BOOT.INI Echo %RP%:\Avldr.xpe="启动WinPE系统">>%RP%:\BOOT.INI if not exist %RP%:\PROGRAMS\nul md %RP%:\PROGRAMS>NUL 2>nul xcopy /y /e /q /h ..\PROGRAMS\*.* %RP%:\PROGRAMS\>NUL 2>nul ATTRIB +S +H +R %RP%:\AVLDR.XPE ATTRIB +S +H +R %RP%:\LDRXPE ATTRIB +S +H +R %RP%:\BOOT.INI ATTRIB +S +H +R %RP%:\BOOT.BAK ATTRIB +S +H +R %RP%:\WIN51IP ATTRIB +S +H +R %RP%:\WIN51IP.SP2 ATTRIB +S +H +R %RP%:\PROGRAMS /D /S ATTRIB +S +H +R %RP%:\MININT /D /S Goto SUCCESS :Err1 CLS Echo 好像你的机器中已经安装了 WinPE 了,请选择以下操作选项。 Echo. Echo 1.卸载原有的 WinPE,并且重新安装。 Echo 2.退出安装 Echo. Set Choice= Set /P Choice=请选择要进行的操作 (1/2) ,然后按回车: If Not '%Choice%'=='' SET Choice=%Choice:~0,1% CLS If /I '%Choice%'=='1' GOTO Install If /I '%Choice%'=='2' EXIT Goto Err1 :Exit CLS Echo 好像你的机器中没有安装操作系统哦,请确认后再执行本安装程序。 Echo. Echo 请按任意键退出...... PAUSE >NUL Exit :SUCCESS CLS Echo 已经成功将WinPE安装到你的 %RP%: 盘。 Echo. Echo 系统分区中的 BOOT.INI 备份为 BOOT.BAK。 Echo. Echo 请按任意键退出...... PAUSE >NUL Exit |
|
| 第22楼 namejm | 发表于 2006-09-20 00:32 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
昨天看帖匆忙,忘记了一个最关键的问题:我那个代码是在当前目录下生成layout_.inf和PECONFIG_.INI的,所以,当把它放到光盘上或者做成ISO加载到虚拟光驱中之后,由于光驱(盘)的只读属性,它不能在当前目录下生成那两个文件。解决办法是把这两个文件放到临时文件中去:把所有的layout_.inf和PECONFIG_.INI替换成%tmp%\layout_.inf和%tem%\PECONFIG_.INI就可以了。
|
|
| 第23楼 tclshx | 发表于 2006-09-20 03:17 |
| 中级用户 发帖 64 积分 249 | |
Originally posted by namejm at 2006-9-20 12:32 AM: 我昨晚试过了,使用临时文件夹,它也非要在这个批处理所在的文件夹内生成一个0字节的文件,所以做成ISO后运行时还是有"拒绝访问"的滚动提示. 除非还有其它修改或替换字符的方法. |
|
| 第24楼 namejm | 发表于 2006-09-20 06:23 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
很明显,还有其他语句对当前的文件进行了改动操作,那你检查一下,看是否还存在在当前目录及其子目录下写入文件的语句,有的话统统写到临时文件夹下去就可以解决了;包括对当前目录下文件的重命名、增减属性等操作。
|
|
| 上一页 1 2 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |