[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理IF Exist怎样判断带空格的目录是否存在?

本帖最后由 oenet 于 2011-7-10 13:11 编辑

判断一个空的目录是否存在时,经常使用 IF Exist xxx Echo Exist 之类的东西,但根据Microsoft解释,If Exist 不能测试目录,要测试目录需要加上\Nul,比如,要测试C:\xxx是否存在,使用IF Exist C:\xxx\Nul Echo Exist。

我的问题来了,现在有这样一个目录C:\AA BB,目录是带空格的,当然我会想到用"C:\AA BB"这样的形式,但是God,IF Exist "C:\AA BB"\Nul Echo Exist 或 IF Exist "C:\AA BB\Nul" Echo Exist 都不能做出正确判断。

Why? Can anyone tell me why? or teach me another way.

**********************************************************************************

补充一下:
IF Exist 是不能直接测试目录(文件夹)的,任何测试目录(文件夹)的方法都是间接的。常见的方法有:
1.测试目录(文件夹)下的NUL。
    这是最可靠的方法。
    任何目录(文件夹)下一定存在NUL,因此只要测试目录(文件夹)下是否存在NUL即可,如:IF Exist C:\mydir\Nul Echo OK!。但是这种方法也有个弊端,就是当目录(文件夹)名中存在空格时无法正常判断,当然也可以将目录名做一下处理,如使用短格式(感谢qzwqzw)。
    当然你可能会说,使用双引号将目录(文件夹)名括起来不就行了,非也,当我们使用双引号将目录(文件夹)名括起来的时候,这时目录(文件夹)名变成了什么?它变成了一个路径,要知道路径只是指向目标的一段字符串,在它下面是不可能存在NUL的,此时使用形如"C:\my dir\Nul"或"C:\my dir"\Nul的时候,你永远也得不到答案。

2.测试目录(方件夹)所在的路径。
    这是最直接有效的方法。
    只要存在一个路径一定存在它所指向的目录(文件夹),但是存在了目录(文件夹)却不一定存在它的路径(最简单的,隐藏分区下文件夹)。这就是这种方法的不可靠之处,但它却是最有效的,为什么呢?IF Exist 同样不能测试没有路径的目录(文件夹) ,所以当我们测试目录(文件夹)时,我们是知道它的路径的。
    这种方法就避免了上面提到的带空格的目录(文件夹)的弊端,不管目录中是否有空格,你都可以使用双引号将路径括起来。如:IF Exist "C:\mydir\" Echo OK! ,注意这里最后的\一定要加上,否则我们就不知道mydir是一个目录(文件夹)还是一个没有扩展名的文件了。

3.测试目录(文件夹)下的文件。
    如:IF Exist C:\mydir\*.* Echo OK! 不推荐这种方法,原因嘛,论坛里可以找到;P

以上写的IF Exist都是用于测试目录(文件夹)的,测试文件或其它IF Exist基本上都是直接的。
1

评分人数

    • zm900612: 感谢给帖子标题标注[已解决]字样PB + 2

这个是可以的,问题是目录带了空格,就不行了

TOP

:funk:

TOP

7# qzwqzw

OK,很Thank you
我这里又有了个新问题,当目录名为A B的形式,就是两个单字母中间带空格,它的短格式怎么写?
AB~1是不对的,You know,AB0929~1正确了,可但是,这个0929怎么来的?
例如:“S B” 文件夹 ,Dir 短格式一下是这样的SB09B9~1,后面的09B9从何而来?

TOP

返回列表