中国DOS联盟论坛

中国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