![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-23 14:01 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,273 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 请教 高手 一个变量的问题. |
| 可打印版本 2,316 / 11 |
| 第1楼 哑巴 | 发表于 2004-03-18 00:00 |
| 初级用户 发帖 37 积分 270 | |
|
请教 高手 一个变量的问题. 我做了一张盘,用dos8系统
A:\ 的目录 2000-06-08 17:00 118,272 IO.SYS 2004-03-18 21:46 206 AUTOEXEC.BAT 2004-03-18 21:15 116 CONFIG.SYS 2004-03-17 22:54 134 nopri.bat 2004-03-18 22:10 2,111 FIXGHO.BAT 1999-10-10 08:01 45,379 SMARTDRV.EXE 2000-06-08 17:00 25,473 MSCDEX.EXE 1997-11-16 10:01 239,333 TW.EXE 2003-04-08 18:34 3,188 FINDCD.EXE 2004-03-17 22:51 125 nocd.bat 2004-03-18 00:37 1,396 FIXPIO.BAT 2002-12-12 18:27 8,666 WBAT.COM 2000-06-08 17:00 64,425 FLASHPT.SYS 2000-06-08 17:00 53,767 EXTRACT.EXE 2000-06-08 17:00 66,300 FDISK.EXE 2000-06-08 17:00 93,442 COMMAND.COM 2000-06-08 17:00 33,191 HIMEM.SYS 2000-06-08 17:00 41,302 OAKCDROM.SYS 2000-06-08 17:00 15,252 ATTRIB.EXE 2000-10-04 18:22 9 MSDOS.SYS 1998-06-19 20:01 6,855 FINDRAMD.EXE =======config.sys======= device=oakcdrom.sys /D:mscd001 device=flashpt.sys files=40 buffers=10 dos=high,umb stacks=9,256 lastdrive=z =======autoexec.bat===== @ECHO OFF path=a:\;c:\windows;c:\windows\command SET DIRCMD=/O:N MSCDEX.EXE /D:mscd001 IF ERRORLEVEL 1 nocd findcd >nul IF "%CDROM%"=="C:" NOPRI set path=%path%;%CDROM%\ smartdrv 2048 1024 fixgho =======fixpio.bat======== @ECHO OFF SET PIO= IF "%CDROM%"=="E:" SET PIO=d: IF "%CDROM%"=="F:" SET PIO=d:,e: IF "%CDROM%"=="G:" SET PIO=d:,e:,f: IF "%CDROM%"=="H:" SET PIO=d:,e:,f:,g: IF "%CDROM%"=="I:" SET PIO=d:,e:,f:,g:,h: IF "%CDROM%"=="J:" SET PIO=d:,e:,f:,g:,h:,i: IF "%CDROM%"=="K:" SET PIO=d:,e:,f:,g:,h:,i:,j: IF "%CDROM%"=="L:" SET PIO=d:,e:,f:,g:,h:,i:,j:,k: IF "%CDROM%"=="M:" SET PIO=d:,e:,f:,g:,h:,i:,j:,k:,l: IF "%CDROM%"=="N:" SET PIO=d:,e:,f:,g:,h:,i:,j:,k:,l:,m: IF "%CDROM%"=="O:" SET PIO=d:,e:,f:,g:,h:,i:,j:,k:,l:,m:,n: IF "%CDROM%"=="P:" SET PIO=d:,e:,f:,g:,h:,i:,j:,k:,l:,m:,n:,o: IF "%CDROM%"=="Q:" SET PIO=d:,e:,f:,g:,h:,i:,j:,k:,l:,m:,n:,o:,p: IF "%CDROM%"=="R:" SET PIO=d:,e:,f:,g:,h:,i:,j:,k:,l:,m:,n:,o:,p:,q: IF "%CDROM%"=="S:" SET PIO=d:,e:,f:,g:,h:,i:,j:,k:,l:,m:,n:,o:,p:,q:,r: IF "%CDROM%"=="T:" SET PIO=d:,e:,f:,g:,h:,i:,j:,k:,l:,m:,n:,o:,p:,q:,r:,s: IF "%CDROM%"=="U:" SET PIO=d:,e:,f:,g:,h:,i:,j:,k:,l:,m:,n:,o:,p:,q:,r:,s:,t: IF "%CDROM%"=="V:" SET PIO=d:,e:,f:,g:,h:,i:,j:,k:,l:,m:,n:,o:,p:,q:,r:,s:,t:,u: IF "%CDROM%"=="W:" SET PIO=d:,e:,f:,g:,h:,i:,j:,k:,l:,m:,n:,o:,p:,q:,r:,s:,t:,u:,v: IF "%CDROM%"=="X:" SET PIO=d:,e:,f:,g:,h:,i:,j:,k:,l:,m:,n:,o:,p:,q:,r:,s:,t:,u:,v:,w: IF "%CDROM%"=="Y:" SET PIO=d:,e:,f:,g:,h:,i:,j:,k:,l:,m:,n:,o:,p:,q:,r:,s:,t:,u:,v:,w:,x: IF "%CDROM%"=="Z:" SET PIO=d:,e:,f:,g:,h:,i:,j:,k:,l:,m:,n:,o:,p:,q:,r:,s:,t:,u:,v:,w:,x:,y: ======nopio======= @tw /np @cls @echo. @echo. @echo 错误:找不到可用的硬盘分区。 @echo 请按 连接上硬盘和分区后再用本光盘。 @echo. @pause @TW /Q =====fixgho.bat========= set wgho= :fixgho call fixpio for %%i in (%PIO%) do if exist %%i%\ghost\system.gho set gho=%%i% rem 在这里为什么我无法设置gho的值? if "%gho%"#==# goto nogho tw /np >nul cls goto res :nogho WBAT BOX "在您的电脑中找不到系统镜像文件,无法还原系统,是否要自动备份系统?",是,否 #1,32 IF ERRORLEVEL 100 GOTO end IF ERRORLEVEL 2 goto end IF ERRORLEVEL 1 goto write goto end :res WBAT BOX "在 %gho% 盘找到一个镜像文件,请选择操作",系统还原,删除还原文件 #1,64 IF ERRORLEVEL 100 GOTO end IF ERRORLEVEL 2 GOTO delgho IF ERRORLEVEL 1 GOTO ress goto end :del gho attrib -s -h -r %gho%\ghost\system.gho del %gho%\ghost\system.gho tw /q fixgho :ress echo. echo. echo 警告:C: 盘上的数据将被完全 echo 删除并还原到上次备份的状态 echo 请确定您已经备份了 C: 盘上 echo 的重要数据才进行此操作 echo 确定还原请按任意键 echo 按 Ctrl+C 键取消此操作 echo. echo. pause >nul echo %CDROM%:\GHOST\ghost -clone,mode=pload,src=%gho%\ghost\system.gho:1,dst=1:1 -sure -rb goto end :write if "%CDROM%"=="D:" GOTO nodr WBAT BOX "请选择要保存 C 盘系统镜像的盘符",%PIO%,取消 #1,64 IF ERRORLEVEL 100 GOTO end IF ERRORLEVEL 23 set wgho=Y: IF ERRORLEVEL 22 set wgho=X: IF ERRORLEVEL 21 set wgho=W: IF ERRORLEVEL 20 set wgho=V: IF ERRORLEVEL 19 set wgho=U: IF ERRORLEVEL 18 set wgho=T: IF ERRORLEVEL 17 set wgho=S: IF ERRORLEVEL 16 set wgho=R: IF ERRORLEVEL 15 set wgho=Q: IF ERRORLEVEL 14 set wgho=P: IF ERRORLEVEL 13 set wgho=O: IF ERRORLEVEL 12 set wgho=N: IF ERRORLEVEL 10 set wgho=M: IF ERRORLEVEL 9 set wgho=L: IF ERRORLEVEL 8 set wgho=K: IF ERRORLEVEL 7 set wgho=J: IF ERRORLEVEL 6 set wgho=I: IF ERRORLEVEL 5 set wgho=H: IF ERRORLEVEL 4 set wgho=G: IF ERRORLEVEL 3 set wgho=F: IF ERRORLEVEL 2 set wgho=E: IF ERRORLEVEL 1 set wgho=D: if exist %wgho%\ghost\nul md %wgho%\ghost echo. echo 这是备份 echo %CDROM%\GHOST\ghost -clone,mode=pdump,src=1:1,dst=%wgho%\ghost\system.gho -sure -rb goto end :nodr cls echo. echo. echo 你的电脑只有一个DOS分区,无法备份系统! echo. echo. pause goto end :end tw /q >nul @echo on ===================== 问题是上面的红字,请高手帮忙!!! |
|
| 第2楼 aria | 发表于 2004-03-19 00:00 |
| 高级用户 发帖 243 积分 924 | |
|
呵呵,建议你把OAKCDROM.SYS换成VIDE-CDD.SYS
使用FLASHPT.SYS,难道你想支持特殊光驱吗? 另外,这篇帖子不应该发到这里 |
|
| 第3楼 哑巴 | 发表于 2004-03-19 00:00 |
| 初级用户 发帖 37 积分 270 | |
|
多谢aria赐教,
我是问盘中的fixgho.bat中为什么我无法设置gho变量的值? 回显是 if exist %PIO% <-这个PIO值是正确的。 请各位大侠帮我。 |
|
| 第4楼 哑巴 | 发表于 2004-03-25 00:00 |
| 初级用户 发帖 37 积分 270 | |
|
请高手看看!!!!
|
|
| 第5楼 Climbing | 发表于 2004-03-26 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
你的批处理中的for循环变量使用方式有问题。我感觉应该写成这样:
for %%i in (%PIO%) do if exist %%i\ghost\system.gho set gho=%%i rem 在这里为什么我无法设置gho的值? if "%gho%"=="" goto nogho |
|
| 第6楼 哑巴 | 发表于 2004-03-30 00:00 |
| 初级用户 发帖 37 积分 270 | |
|
把for %%i in (%PIO%) do if exist %%i%\ghost\system.gho set gho=%%i%
写成for %%i in (%PIO%) do if exist %%i\ghost\system.gho set gho=%%i 可Dos会提示语法错误。 |
|
| 第7楼 Climbing | 发表于 2004-03-31 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
是不是你的DOS 8有问题,这是我在Win2003的DOS窗口单步执行的命令结果:
D:\>set PIO=c:,d:,e:,f: D:\>for %i in (%PIO%) do if exist %i\ghost\system.gho set gho=%i D:\>if exist c:\ghost\system.gho set gho=c: D:\>if exist d:\ghost\system.gho set gho=d: D:\>if exist e:\ghost\system.gho set gho=e: D:\>if exist f:\ghost\system.gho set gho=f: 从结果看,没有什么问题呀 |
|
| 第8楼 哑巴 | 发表于 2004-04-11 00:00 |
| 初级用户 发帖 37 积分 270 | |
|
2003和XP好象是可以,但换成DOS8.0和DOS7.1都无法传递%PIO%的值。
这是为何??????? |
|
| 第9楼 willsort | 发表于 2004-04-13 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re 哑巴:
如果想在DOS7/8版本下运行正常,请将%PIO%值中的盘符分隔符改为分号,也可以是等号或者空格,但不能是逗号,否则for命令无法分离出单独的驱动器盘符。 |
|
| 第10楼 哑巴 | 发表于 2004-04-13 00:00 |
| 初级用户 发帖 37 积分 270 | |
|
willsort 是个好同志,我为什么没有注意到这点!
98启动盘的%LglDrv%就是个好例子, 我记得DOS622好象只能用逗号,太久没用给忘了。 |
|
| 第11楼 willsort | 发表于 2004-04-14 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re 哑巴:
在DOS的一系列版本中,除了NT平台下的虚拟DOS控制台之外,其他所有的版本,都支持三种命令参数分隔符,那就是分号、等号和空格。 命令行中较常使用的是空格,FOR语句中的循环集中较常使用的是分号,而在内部命令PATH中较常使用的是等号。除了极个别的场合之外,基本上所有的内部命令都兼容三种参数分隔符,也就是说,在内部命令的使用中,可以用空格的地方,也可以使用等号和分号,效果是等同的。 其中的原因是,作为内部命令的统一管理者command.com处理参数分隔的情况时,为了简单的支持各种场合的使用,而将他们一律作成通用分隔符处理。当然,在外部命令中,使用了自身的参数分隔识别机制,因而没有空格以外多余的分隔符;而在某些内部命令(如set)中,对等号和分号可能有特殊的解释,属于特殊例外。 |
|
| 第12楼 哑巴 | 发表于 2004-04-19 00:00 |
| 初级用户 发帖 37 积分 270 | |
|
这个好理解,谢了,我目前还有一点小问题没有搞定。
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |