- 帖子
- 6
- 积分
- 217
- 技术
- 0
- 捐助
- 0
- 注册时间
- 2009-8-14
|
[文件操作] [已解决]批处理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
评分人数
-
|