无忧启动论坛

标题: 请帮俺看看这个批处理错在哪? [打印本页]

作者: dosmexp    时间: 2007-3-17 13:10
标题: 请帮俺看看这个批处理错在哪?
@echo off
if not exist c:\abc goto prepare

:start
c:\abc\xyz.exe
goto ok

:prepare
md c:\abc
copy a:\xyz.exe c:\abc
goto start

:ok

我的原意是:如果C盘下没有abc文件夹,就在C盘下建一个名为abc的文件夹,然后将xyz.exe拷进去,再运行xyz.exe;如果C盘下有abc文件夹,就直接运行xyz.exe。

可是现在这个批处理一运行,就开始在C盘建文件夹,即使那里已经有了abc文件夹。怎么运行都是这样,这是怎么回事?我对IF和GOTO语句的理解错在哪?

请老师们教导!
作者: 无翼鸟飞翔    时间: 2007-3-17 14:08
原帖由 dosmexp 于 2007-3-17 01:10 PM 发表
@echo off
if not exist c:\abc goto prepare

:start
c:\abc\xyz.exe
goto ok

:prepare
md c:\abc
copy a:\xyz.exe c:\abc
goto start

:ok

我的原意是:如果C盘下没有abc文件夹,就在C盘下建 ...

可以建立撒。.另外COPY语句错了。应该是COPY A:\XYZ.EXE C:\ABC\XYZ.EXE..还有。.OK语句没有命令行
事实上。你没必要写PREPARE语句撒。直接在COPY下面运行XYZ.EXE不就可以了?
@echo off
if not exist c:\abc goto 2
c:\abc\xyz.exe
goto ok

:2
md c:\abc
copy/y  a:\xyz.exe c:\abc\xyz.exe
c:\abc\xyz.exe
goto ok

:ok
exit
作者: Sia    时间: 2007-3-19 04:26
可是现在这个批处理一运行,就开始在C盘建文件夹,即使那里已经有了abc文件夹。怎么运行都是这样,这是怎么回事?


If 在批处理程序中执行条件处理。
【语法】
  1. if [not] errorlevel Number Command [else Expression]
  2. if [not] String1==String2 Command [else Expression]
  3. if [not] exist FileName Command [else Expression]
复制代码
注意上面最后一行,是“文件名”,非“文件夹”。就你的批处理第二行“if not exist c:\abc goto prepare”是判断是否有叫abc的文件,很明显这语句永远为“真”,就一定转到“prepare"行。

【注意】
  1. if 命令不能用于直接测试目录,但空 (NUL) 设备确实存在于每个目录中。因此,可以通过测试零设备确定目录是否存在。
复制代码

if not exist c:\abc goto prepare
应改为:
if not exist c:abc\null goto prepare

[ 本帖最后由 Sia 于 2007-3-19 04:33 AM 编辑 ]
作者: lp1129    时间: 2007-3-25 23:37
楼上的另人费解,怎么不能判断空目录是否存在,画蛇添足了!

试试以下代码:

if not exist c:\abc (echo 没有目录) else echo 有目录
作者: jasonwang    时间: 2007-3-26 11:14
if not exist c:\abc goto prepare

:start
c:\abc\xyz.exe
goto ok

:prepare
md c:\abc
copy a:\xyz.exe c:\abc
echo >>it's ok
goto start

:ok
pause

我测试了,没有问题.有可能少写了冒号的原因

[ 本帖最后由 jasonwang 于 2007-3-26 11:17 AM 编辑 ]
作者: jasonwang    时间: 2007-3-26 11:15
运行1:
C:\Documents and Settings\jasonwang\桌面>if not exist c:\abc goto prepare

C:\Documents and Settings\jasonwang\桌面>md c:\abc

C:\Documents and Settings\jasonwang\桌面>copy a:\xyz.exe c:\abc
系统找不到指定的驱动器。

C:\Documents and Settings\jasonwang\桌面>echo  ok 1>>it's

C:\Documents and Settings\jasonwang\桌面>goto start

C:\Documents and Settings\jasonwang\桌面>c:\abc\xyz.exe
'c:\abc\xyz.exe' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

C:\Documents and Settings\jasonwang\桌面>goto ok

C:\Documents and Settings\jasonwang\桌面>pause
请按任意键继续. . .







运行2:
C:\Documents and Settings\jasonwang\桌面>if not exist c:\abc goto prepare

C:\Documents and Settings\jasonwang\桌面>c:\abc\xyz.exe
'c:\abc\xyz.exe' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

C:\Documents and Settings\jasonwang\桌面>goto ok

C:\Documents and Settings\jasonwang\桌面>pause
请按任意键继续. . .

[ 本帖最后由 jasonwang 于 2007-3-26 11:19 AM 编辑 ]
作者: af01    时间: 2007-3-27 21:43
应该没有什么问题呀
作者: PPP1314    时间: 2007-4-10 00:23
顶下,用于自动备份或还原系统时,判断目标目录是否存在......一会试下哪种可行,.......




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3