无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 5057|回复: 10
打印 上一主题 下一主题

if exist c:\windows cd c:\windows

[复制链接]
跳转到指定楼层
1#
发表于 2011-1-17 15:39:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于纯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 命令已经失效了。
2#
发表于 2011-1-17 16:05:20 | 只看该作者
if exist c:\windows cd /d c:\windows
回复

使用道具 举报

3#
 楼主| 发表于 2011-1-17 16:10:50 | 只看该作者


由图可见,还是不行。但是又没出现 BAD COMMAND 之类的错误提示,奇怪了。
回复

使用道具 举报

4#
发表于 2011-1-17 17:17:08 | 只看该作者
if exist c:\windows\nul cd /d c:\windows
回复

使用道具 举报

5#
 楼主| 发表于 2011-1-17 17:56:37 | 只看该作者
真是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 编辑 ]
回复

使用道具 举报

6#
发表于 2011-1-17 21:26:50 | 只看该作者
if not exist c:\windows\ goto ext
c:
cd \windows
:ext

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

[ 本帖最后由 netwinxp 于 2011-1-17 21:28 编辑 ]
回复

使用道具 举报

7#
发表于 2011-1-17 21:58:53 | 只看该作者
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:
回复

使用道具 举报

8#
 楼主| 发表于 2011-1-18 09:48:41 | 只看该作者
原帖由 chenall 于 2011-1-17 21:58 发表
N年前就研究过了..

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

这招妙啊!学习了……
回复

使用道具 举报

9#
 楼主| 发表于 2011-1-18 11:11:05 | 只看该作者
原帖由 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 编辑 ]
回复

使用道具 举报

10#
 楼主| 发表于 2011-1-18 11:16:41 | 只看该作者
我知道了
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 编辑 ]
回复

使用道具 举报

11#
发表于 2011-1-18 14:12:30 | 只看该作者
DOS的CD一直支持直接跨盘符改变目录的,跨盘符改变目录必须走两步才可以实现,CHENALL已经说了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-1 12:48

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表