标题: [已结]为什么“if not exist……”语句不会跳转?
[打印本页]
作者: martin325
时间: 2006-4-30 12:57
标题: [已结]为什么“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 ]
作者: kcdsw
时间: 2006-4-30 13:04
我也遇到过这种情况 用if语句判断的时候总是会出问题
后来我在群内高手的指点下用dir+&做的跳转
作者: martin325
时间: 2006-4-30 13:18
我测试了一下,用 “if exist ……”语句是可以跳转的。
不知为什么?
作者: martin325
时间: 2006-4-30 13:24
用dir+&怎么做的跳转?
怎么写的?
请举例,让我也学习学习。
作者: martin325
时间: 2006-4-30 13:41
已经解决了。“if not exist……”语句是可以跳转的。
出现1楼所描述的原因在于,本人把该段批处理的命名与要执行的程序名一样,结果在手工输入该批处理时,没有加上后缀“.bat”的缘故。
作者: kcdsw
时间: 2006-4-30 15:28
我上次是检测某个'参数'是文件还是目录时用了
if exist %a%\. goto b
结果他怎么都不跳转
后来用了
dir %a%\. >nul 2>nul & goto b
作者: martin325
时间: 2006-4-30 17:08
dir %a%\. >nul 2>nul & goto b 这句看不懂,能不能解释一下?
特别是“ >nul 2>nul &”
作者: kcdsw
时间: 2006-4-30 18:15
呵呵 每个文件夹下都存在2个目录 1 是. 2是..
对不存在的目录使用dir的时候它会返回错误值
而我的目的是得知它存在不存在 所以不论正确与否 dir的执行结果我是不需要显示出来的
我只需要用& 来取它的结果
作者: 3742668
时间: 2006-4-30 18:21
用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
作者: martin325
时间: 2006-4-30 21:52
dir C:\menu.lst >nul 2>nul && goto step1
这里有两个 &&
分别表示什么意思?
作者: 220110
时间: 2006-5-1 23:05
命令1 & 命令2 :单个&号表示,无论前面命令1执行成功与否,命令2照常执行.
命令1 && 命令2 :表示,只有命令1执行成功,并成功返回"0"的参数给命令2时,命令2才会继续.
命令1 | 命令2 与 命令1 || 命令2 的用法类似.
作者: 3742668
时间: 2006-5-2 01:06
command1 | command2
表示把command1的输出当作command2的参数。
command1 || command2
表示若command1执行不成功才执行command2,反之则不执行。
作者: gxp2005
时间: 2006-5-5 11:03
标题: 好!
俺又学了一招呀
作者: fan927
时间: 2006-5-24 13:03
其实一些"是否"判断用管道符号很方便,用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.
不对的地方请高手指正
作者: nafan
时间: 2008-11-13 17:10
学了!