dir的奇怪行为" ../*.*" (注意正斜杠)

时间:2016-09-19 15:40:43

标签: cmd directory

具有以下文件夹结构:

  • A [Dir]
    FILE.TXT
    • B [Dir]
      • C [Dir]

当前工作目录位于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

真奇怪。有人知道发生了什么吗?

1 个答案:

答案 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调用显示所描述的行为。