具有以下文件夹结构:
当前工作目录位于C
如果我这样做
DIR "..\File.txt"
我没有获得任何文件,因为B是空的。
但是,如果我这样做
DIR "../File.txt" --> Note the / instead of the \
我在A !!!获取文件
如果我这样做
DIR "../*.*"
我在A处获取文件,dir输出表明文件位于B !!!
这里是DIR命令的输出:
E:\a>dir
Directory of E:\a
2016-09-19 08:20 <DIR> .
2016-09-19 08:20 <DIR> ..
2016-09-19 08:20 5 File.txt
2016-09-19 08:19 <DIR> b
E:\a>cd b
E:\a\b>dir
Directory of E:\a\b
2016-09-19 08:19 <DIR> .
2016-09-19 08:19 <DIR> ..
2016-09-19 10:20 <DIR> c
E:\a\b>cd c
E:\a\b\c>dir
Directory of E:\a\b\c
2016-09-19 10:20 <DIR> .
2016-09-19 10:20 <DIR> ..
E:\a\b\c>dir "..\*.*"
Directory of E:\a\b
2016-09-19 08:19 <DIR> .
2016-09-19 08:19 <DIR> ..
2016-09-19 10:20 <DIR> c
E:\a\b\c>dir "../*.*"
Directory of E:\a\b
2016-09-19 08:20 <DIR> .
2016-09-19 08:20 <DIR> ..
2016-09-19 08:20 5 File.txt
2016-09-19 08:19 <DIR> b
真奇怪。有人知道发生了什么吗?
答案 0 :(得分:1)
是的,dir
标记器中存在错误。
dir
命令将尝试将请求的路径+ fileMask解析为完整的目录路径,然后它将附加文件掩码(或者为*
)以枚举已解析路径中的文件。
奇怪的是,文件夹解析没有任何问题来确定起始文件夹应该是什么(输出中为Directory of E:\a\b
),但令牌生成器在删除 relative 文件夹引用时遇到问题使用正斜杠时的文件掩码。
结果是,一旦文件夹被解析为E:\a\b\
(正确),就会附加完整的../*.txt
(错误的部分,相对文件夹引用应该与文件掩码分开),以及然后枚举E:\a\b\../*.txt
(即E:\a\*.txt
)没有任何问题
现在,如果我们使用E:\a\b\c\d
当前活动目录创建更深层次结构(d
),则可以通过将请求替换为dir "../../*.txt"
来测试此行为。在这种情况下,起始文件夹将被解析为
E:\a\b
,但随附"../../*.txt"
,最后将枚举根文件夹。
注意:此时我手头没有调试器可以100%安全,但是已经测试了在{{{{}}下运行cmd
实例1}}和api调用显示所描述的行为。