无忧启动论坛

标题: if exist c:\windows cd c:\windows [打印本页]

作者: 2010-    时间: 2011-1-17 15:39
标题: if exist c:\windows cd c:\windows
关于纯DOS里面判断文件或目录是否存在的问题,让我非常困惑。
情况如下:

一、我输入命令 if exist c:\windows cd c:\windows
    即判断 c:\windows 目录是否存在,如存在则进入该目录。
    在XP里面的截图如下
    由图可见,当前目录已经由 ...\Unknown> 变成 C:\WINDOWS>
    表明XP里面执行正常。



二、在纯DOS里面则又是另外一种结果
    当前盘符为 A:\>
    输入 if exist c:\windows cd c:\windows 之后并没进入 windows 目录!
    盘符仍旧为 A:\>
    于是我又输入 cd c:\windows ,结果还是没进去。
    于是我又输入 c: ,这次一下就进入了 windosw 目录。
    然后我回到 c: 根目录
    接着输入 if exist c:\windows cd c:\windows 可是仍旧没能进得去,
    非得输入 cd c:\windows 才能进去。



请问这是为什么?XP里面命令
    if exist c:\windows cd c:\windows
能够正确执行,而在纯DOS里面却错得那么离谱?
如果我想在纯DOS里面判断某个文件或者目录是否存在,又该执行什么命令呢?
由上图可见,if exist 命令已经失效了。
作者: haiou327    时间: 2011-1-17 16:05
if exist c:\windows cd /d c:\windows
作者: 2010-    时间: 2011-1-17 16:10


由图可见,还是不行。但是又没出现 BAD COMMAND 之类的错误提示,奇怪了。
作者: zhaohj    时间: 2011-1-17 17:17
if exist c:\windows\nul cd /d c:\windows
作者: 2010-    时间: 2011-1-17 17:56
真是BUG,原因被我找到了。
纯DOS里面 if exist 只能判断文件不能判断目录!

在我的C盘存在 Windows 目录,并且存在 ntldr 文件
输入命令 if exist c:\windows c: 发现 DOS 无反应;
输入命令 if exist c:\ntldr c:   发现 DOS 改变盘符了!

再回到A盘,
输入命令 if exist c:\ntldr cd c:\windows 发现 DOS 无反应
就算输入 if exist c:\ntldr c: & cd c:\windows 也不能立即进入 Windows 目录。



用 if 来判断环境变量时好象也有问题,如果该变量不存在,竟然会提示参数错误
感觉 if %WIN%==DOW c: 这个句子应该没问题啊



[ 本帖最后由 2010- 于 2011-1-17 18:15 编辑 ]
作者: netwinxp    时间: 2011-1-17 21:26
if not exist c:\windows\ goto ext
c:
cd \windows
:ext

不知道酱紫行不行...好像不太行:(

[ 本帖最后由 netwinxp 于 2011-1-17 21:28 编辑 ]
作者: chenall    时间: 2011-1-17 21:58
N年前就研究过了..

1.判断目录是否存在
if exist c:\windows\nul echo c:\windows exist...
2.纯DOS不支持cd /d如果当前是a:想切换到c:\windows必须两个语句
c:
  cd \windows
或 cd c:\windows
     c:
3.用IF判断变量你必须防空.(所有批处理都是一样)
例子
if %WIN%==DOW c:
如果这个WIN变量不存在时实际上DOS命令执行的是
if ==DOW c:
这样肯定是语法错误了..所以需要防空..可以在两边随意添加相同的字符就行了.
if #%WIN%==#DOW c:

if "%WIN%"=="DOW" c:
作者: 2010-    时间: 2011-1-18 09:48
原帖由 chenall 于 2011-1-17 21:58 发表
N年前就研究过了..

if #%WIN%==#DOW c:
      ...

这招妙啊!学习了……
作者: 2010-    时间: 2011-1-18 11:11
原帖由 netwinxp 于 2011-1-17 21:26 发表
if not exist c:\windows\ goto ext
c:
cd \windows
:ext

不知道酱紫行不行...好像不太行:(

我对这DOS算是没语言了,搞不懂它!
cd c:\windows\       报错
cd c:\windows        正确
if not exist c:\windows\ c:       竟然会执行
if exist c:\windows\ a:       它却不执行



[ 本帖最后由 2010- 于 2011-1-18 11:40 编辑 ]
作者: 2010-    时间: 2011-1-18 11:16
我知道了
if not exist c:\windows\ c:       竟然会执行
这是一个假象!

由于DOS根本不认识 c:\windows\ 是个目录,
所以 not exist c:\windows\ 判断结果肯定为真!
所以 if not exist c:\windows\ c: 必定会切换盘符到C:
但是 if exist c:\windows\ A: 是永远执行不了,因为它根本不懂 c:\windows\ 是个目录

所以下面代码是不会进入 windows 目录的,它直接跳到 :ext 去了
if not exist c:\windows\ goto ext
c:
cd \windows
:ext

[ 本帖最后由 2010- 于 2011-1-18 11:40 编辑 ]
作者: xianglang    时间: 2011-1-18 14:12
DOS的CD一直支持直接跨盘符改变目录的,跨盘符改变目录必须走两步才可以实现,CHENALL已经说了。




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