中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]为什么“if not exist……”语句不会跳转?
作者:
标题: [已结]为什么“if not exist……”语句不会跳转? 上一主题 | 下一主题
martin325
银牌会员





积分 1582
发帖 603
注册 2006-2-20
状态 离线
『楼 主』:  [已结]为什么“if not exist……”语句不会跳转?

如题。举一个例子:
@echo off
if not exist C:\menu.lst goto step1
grub.exe
root (hd0,0)
chainloader +1
boot

:step1
echo The "C:\menu.lst" is not exist!
echo The system is going to be shut.
shut.bat
goto quit
C盘中的menu.lst被删除,然后执行上面的批处理,结果还是不会跳转到step1去!!!
这是为什么?
请高手指点。
谢谢。

[ Last edited by HAT on 2008-11-13 at 17:36 ]

2006-4-30 12:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 2 楼』:  

我也遇到过这种情况  用if语句判断的时候总是会出问题
后来我在群内高手的指点下用dir+&做的跳转

2006-4-30 13:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
martin325
银牌会员





积分 1582
发帖 603
注册 2006-2-20
状态 离线
『第 3 楼』:  

我测试了一下,用 “if exist ……”语句是可以跳转的。

不知为什么?

2006-4-30 13:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
martin325
银牌会员





积分 1582
发帖 603
注册 2006-2-20
状态 离线
『第 4 楼』:  

用dir+&怎么做的跳转?

怎么写的?

请举例,让我也学习学习。

2006-4-30 13:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
martin325
银牌会员





积分 1582
发帖 603
注册 2006-2-20
状态 离线
『第 5 楼』:  

已经解决了。“if not exist……”语句是可以跳转的。

出现1楼所描述的原因在于,本人把该段批处理的命名与要执行的程序名一样,结果在手工输入该批处理时,没有加上后缀“.bat”的缘故。

2006-4-30 13:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 6 楼』:  

我上次是检测某个'参数'是文件还是目录时用了
if exist %a%\. goto b
结果他怎么都不跳转

后来用了
dir %a%\. >nul 2>nul & goto b


2006-4-30 15:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
martin325
银牌会员





积分 1582
发帖 603
注册 2006-2-20
状态 离线
『第 7 楼』:  

dir %a%\. >nul 2>nul & goto b 这句看不懂,能不能解释一下?

特别是“ >nul 2>nul &”

2006-4-30 17:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 8 楼』:  

呵呵 每个文件夹下都存在2个目录 1 是. 2是..
对不存在的目录使用dir的时候它会返回错误值

而我的目的是得知它存在不存在 所以不论正确与否 dir的执行结果我是不需要显示出来的

我只需要用& 来取它的结果

2006-4-30 18:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 9 楼』:  

用dir C:\menu.lst >nul 2>nul && goto step1吧。
dir %a%\. >nul 2>nul & goto b这句的意思是:
查找名为%a%的目录,然后跳转到标号b处。这句执行完后不管是否存在目录%a%都会跳转到b处,所以应该和你的要求有所偏差。
>nul 2>nul表示dir命令产生的信息不在屏幕上显示,具体详细解释可翻一翻论坛老贴。
dir %a%\. 表示查找%a%目录下的.目录,在批处理中,.表示同级目录,".."表示上一级目录,所以dir %a%就是表示查找%a%目录。
补充:
1,此命令是根据dir是否正确执行来跳转,dir是可以直接用来查找目录的,所以可以直接写成dir %a% >nul 2>nul & goto b
2,考虑到命令行中可以能碰到路径包含空格的情况,一般在调用变量的时候两边加上""“号可以防止出错: dir "%a%" >nul 2>nul && goto Label

2006-4-30 18:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
martin325
银牌会员





积分 1582
发帖 603
注册 2006-2-20
状态 离线
『第 10 楼』:  

dir C:\menu.lst >nul 2>nul && goto step1
这里有两个 &&
分别表示什么意思?

2006-4-30 21:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
220110
荣誉版主




积分 718
发帖 313
注册 2005-9-26
状态 离线
『第 11 楼』:  

命令1 & 命令2 :单个&号表示,无论前面命令1执行成功与否,命令2照常执行.

命令1 && 命令2 :表示,只有命令1执行成功,并成功返回"0"的参数给命令2时,命令2才会继续.

命令1 | 命令2  与  命令1 || 命令2 的用法类似.

2006-5-1 23:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 12 楼』:  

command1 | command2
表示把command1的输出当作command2的参数。
command1 || command2
表示若command1执行不成功才执行command2,反之则不执行。

2006-5-2 01:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gxp2005
新手上路





积分 2
发帖 1
注册 2006-5-5
状态 离线
『第 13 楼』:  好!

俺又学了一招呀

2006-5-5 11:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fan927
初级用户





积分 82
发帖 31
注册 2006-5-23
状态 离线
『第 14 楼』:  

其实一些"是否"判断用管道符号很方便,用if反而复杂化,一些个人观点.
dir C:\menu.lst &&grub.exe&root (hd0,0)&chainloader +1&boot||echo The "C:\menu.lst" is not exist!&echo The system is going to be shut.
不对的地方请高手指正

2006-5-24 13:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
nafan
初级用户





积分 22
发帖 21
注册 2008-11-13
状态 离线
『第 15 楼』:  

学了!

2008-11-13 17:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: