中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教 高手 一个变量的问题.
作者:
标题: 请教 高手 一个变量的问题. 上一主题 | 下一主题
哑巴
初级用户

老大不小


积分 270
发帖 37
注册 2003-12-31
状态 离线
『楼 主』:  请教 高手 一个变量的问题.

我做了一张盘,用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
=====================

问题是上面的红字,请高手帮忙!!!









[em24][em06][em24]

[此贴子已经被作者于2004-4-12 9:27:39编辑过]






C:\>给我$100,0000
Bad command or file name
2004-3-18 00:00
查看资料  发送邮件  发短消息 网志  OICQ (12333705)  编辑帖子  回复  引用回复
aria
高级用户




积分 924
发帖 243
注册 2003-7-9
状态 离线
『第 2 楼』:  

呵呵,建议你把OAKCDROM.SYS换成VIDE-CDD.SYS
使用FLASHPT.SYS,难道你想支持特殊光驱吗?

另外,这篇帖子不应该发到这里

[此贴子已经被作者于2004-3-19 14:37:26编辑过]




2004-3-19 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
哑巴
初级用户

老大不小


积分 270
发帖 37
注册 2003-12-31
状态 离线
『第 3 楼』:  

多谢aria赐教,
我是问盘中的fixgho.bat中为什么我无法设置gho变量的值?
回显是
if exist %PIO% <-这个PIO值是正确的。
请各位大侠帮我。



C:\>给我$100,0000
Bad command or file name
2004-3-19 00:00
查看资料  发送邮件  发短消息 网志  OICQ (12333705)  编辑帖子  回复  引用回复
哑巴
初级用户

老大不小


积分 270
发帖 37
注册 2003-12-31
状态 离线
『第 4 楼』:  

请高手看看!!!!



C:\>给我$100,0000
Bad command or file name
2004-3-25 00:00
查看资料  发送邮件  发短消息 网志  OICQ (12333705)  编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 5 楼』:  

你的批处理中的for循环变量使用方式有问题。我感觉应该写成这样:

for %%i in (%PIO%) do if exist %%i\ghost\system.gho set gho=%%i
rem  在这里为什么我无法设置gho的值?
if "%gho%"=="" goto nogho






偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2004-3-26 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
哑巴
初级用户

老大不小


积分 270
发帖 37
注册 2003-12-31
状态 离线
『第 6 楼』:  

把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会提示语法错误。



C:\>给我$100,0000
Bad command or file name
2004-3-30 00:00
查看资料  发送邮件  发短消息 网志  OICQ (12333705)  编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 7 楼』:  

是不是你的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:

从结果看,没有什么问题呀



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2004-3-31 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
哑巴
初级用户

老大不小


积分 270
发帖 37
注册 2003-12-31
状态 离线
『第 8 楼』:  

2003和XP好象是可以,但换成DOS8.0和DOS7.1都无法传递%PIO%的值。
这是为何???????




C:\>给我$100,0000
Bad command or file name
2004-4-11 00:00
查看资料  发送邮件  发短消息 网志  OICQ (12333705)  编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 9 楼』:  

Re 哑巴:

    如果想在DOS7/8版本下运行正常,请将%PIO%值中的盘符分隔符改为分号,也可以是等号或者空格,但不能是逗号,否则for命令无法分离出单独的驱动器盘符。



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-4-13 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
哑巴
初级用户

老大不小


积分 270
发帖 37
注册 2003-12-31
状态 离线
『第 10 楼』:  

willsort  是个好同志,我为什么没有注意到这点!
98启动盘的%LglDrv%就是个好例子,
我记得DOS622好象只能用逗号,太久没用给忘了。



C:\>给我$100,0000
Bad command or file name
2004-4-13 00:00
查看资料  发送邮件  发短消息 网志  OICQ (12333705)  编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 11 楼』:  

Re 哑巴:

    在DOS的一系列版本中,除了NT平台下的虚拟DOS控制台之外,其他所有的版本,都支持三种命令参数分隔符,那就是分号、等号和空格。

    命令行中较常使用的是空格,FOR语句中的循环集中较常使用的是分号,而在内部命令PATH中较常使用的是等号。除了极个别的场合之外,基本上所有的内部命令都兼容三种参数分隔符,也就是说,在内部命令的使用中,可以用空格的地方,也可以使用等号和分号,效果是等同的。

    其中的原因是,作为内部命令的统一管理者command.com处理参数分隔的情况时,为了简单的支持各种场合的使用,而将他们一律作成通用分隔符处理。当然,在外部命令中,使用了自身的参数分隔识别机制,因而没有空格以外多余的分隔符;而在某些内部命令(如set)中,对等号和分号可能有特殊的解释,属于特殊例外。


[此贴子已经被作者于2004-4-20 11:24:39编辑过]






※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2004-4-14 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
哑巴
初级用户

老大不小


积分 270
发帖 37
注册 2003-12-31
状态 离线
『第 12 楼』:  

这个好理解,谢了,我目前还有一点小问题没有搞定。



C:\>给我$100,0000
Bad command or file name
2004-4-19 00:00
查看资料  发送邮件  发短消息 网志  OICQ (12333705)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: