中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 一个if语句使用中的问题,请教!
作者:
标题: 一个if语句使用中的问题,请教! 上一主题 | 下一主题
OverThere
新手上路





积分 7
发帖 3
注册 2007-9-25
状态 离线
『楼 主』:  一个if语句使用中的问题,请教!

为什么我的程序如果运行到第一个if如果条件为真的时候,总是有The syntax of the command is incorrect.这样的错误

echo Input a file:
set/p INPUTFILE=

if /i "%INPUTFILE%"=="" (
        echo        111111111111
        set INPUTFILE=Document.txt
        goto :END
) else (
        echo        222222222222222
        if /i not exist %INPUTFILE% (
                echo        333333333333
                set INPUTFILE=Document.txt
                goto :END
        )
)

:BEGIN               
echo        #################
goto :EOF

:END
set INPUTFILE=
echo        @@@@@@@@@@@@@@@@@@

2007-11-2 20:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
picat
初级用户





积分 150
发帖 68
注册 2007-4-26
状态 离线
『第 2 楼』:  

以下是XP自带的帮助信息,自己也没怎么在意过,一起学习吧。
ELSE 子句必须在 IF 之后出现在同一行上。例如:

    IF EXIST filename. (
    del filename.
    ) ELSE (
        echo filename. missing.
    )

因为 del 命令需要用一个新行终止,以下子句不会有效:

IF EXIST filename. del filename. ELSE echo filename. missing

由于 ELSE 命令必须与 IF 命令的尾端在同一行上,以下子句也
不会有效:

    IF EXIST filename. del filename.
    ELSE echo filename. missing

如果都放在同一行上,以下子句有效:

    IF EXIST filename. (del filename.) ELSE echo filename. missing

2007-11-2 21:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
picat
初级用户





积分 150
发帖 68
注册 2007-4-26
状态 离线
『第 3 楼』:  

搞错了,LZ的问题在于变量没有延迟,改成如下即可:
setlocal enabledelayedexpansion
echo Input a file:
set/p INPUTFILE=

if /i "!INPUTFILE!"=="" (
        echo        111111111111
        set INPUTFILE=Document.txt
        goto :END
) else (
        echo        222222222222222
               if not exist !INPUTFILE! (
                echo        333333333333
                set INPUTFILE=Document.txt
                goto :END
        )

)

:BEGIN               
echo        #################
goto :EOF

:END
set INPUTFILE=
echo        @@@@@@@@@@@@@@@@@@

lz可以搜索一下关于变量延迟的帖子,够你学习一阵子了。

2007-11-2 22:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dikex
高级用户

潜水修练批处理



积分 788
发帖 366
注册 2006-12-31
状态 离线
『第 4 楼』:  

问题出在else分句的%INPUTFILE%上面,谨记批处理的%%这些变量是会在整个命令执行前就进行替换,之后才执行(开启变量延迟后的!!变量则不同);
而当提示输入时你按了回车,%INPUTFILE%为空,系统执行时变成了
if /i not exist (
这样就出现语法错误了,在两旁加上双引号之类的就可以了;
另外if exist可以不用加/i参数
echo Input a file:
set/p INPUTFILE=

if /i "%INPUTFILE%"=="" (
        echo        111111111111
        set INPUTFILE=Document.txt
        goto :END
) else (
        echo        222222222222222
        if not exist "%INPUTFILE%" (
                echo        333333333333
                set INPUTFILE=Document.txt
                goto :END
        )
)

:BEGIN               
echo        #################
pause
goto :EOF

:END
set INPUTFILE=
echo        @@@@@@@@@@@@@@@@@@
pause
[ Last edited by dikex on 2007-11-2 at 10:09 PM ]



正在潜水修练的批处理小白
2007-11-2 22:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
OverThere
新手上路





积分 7
发帖 3
注册 2007-9-25
状态 离线
『第 5 楼』:  

太感谢3#,4#了,哈哈,一语惊醒梦中人啊!回3#的,我看了一遍就明白了哈!

[ Last edited by OverThere on 2007-11-3 at 01:52 AM ]

2007-11-2 22:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: