Cmd 使用dir";./*的奇怪行为*&引用;(注意正斜杠)

Cmd 使用dir";./*的奇怪行为*&引用;(注意正斜杠),cmd,directory,Cmd,Directory,具有以下文件夹结构: A[Dir] File.txt B[目录] C[目录] 当前工作目录位于C 如果我这样做 DIR "..\File.txt" DIR "../*.*" 我没有得到任何文件,这是预期的,因为B是空的 然而,如果我这样做 DIR "../File.txt" --> Note the / instead of the \ 我一个小时就拿到文件了 如果我这样做 DIR "..\File.txt" DIR "../*.*" 我得到的文件在A

具有以下文件夹结构:

  • A[Dir]
    File.txt
    • B[目录]
      • C[目录]
当前工作目录位于C

如果我这样做

DIR "..\File.txt"
DIR "../*.*"
我没有得到任何文件,这是预期的,因为B是空的

然而,如果我这样做

DIR "../File.txt"         --> Note the / instead of the \
我一个小时就拿到文件了

如果我这样做

DIR "..\File.txt"
DIR "../*.*"
我得到的文件在A和目录输出说,文件在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
E:\a>dir
E:\a目录
2016-09-19  08:20              .         
2016-09-19  08:20              ..        
2016-09-19 08:20 5 File.txt
2016-09-19 08:19 b
E:\a>CDB
E:\a\b>目录
E:\a\b的目录
2016-09-19  08:19              .
2016-09-19  08:19              ..
2016-09-19 10:20摄氏度
E:\a\b>cd c
E:\a\b\c>dir
E:\a\b\c目录
2016-09-19  10:20              .
2016-09-19  10:20              ..
E:\a\b\c>目录“.\*.*”
E:\a\b的目录
2016-09-19  08:19              .              
2016-09-19  08:19              ..             
2016-09-19 10:20摄氏度
E:\a\b\c>目录“./*.*”
E:\a\b的目录
2016-09-19  08:20              .
2016-09-19  08:20              ..
2016-09-19 08:20 5 File.txt
2016-09-19 08:19 b

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

是的,
dir
tokenizer中有一个错误

dir
命令将尝试将请求的路径+文件掩码解析为完整的目录路径,然后它将附加文件掩码(或asume a
*
)以枚举解析路径内的文件

奇怪的是,文件夹解析在确定起始文件夹应该是什么(输出中的E:\a\b目录)方面没有任何问题,但是当使用正向斜杠时,标记器在从文件掩码中删除相对文件夹引用时有问题

结果是,一旦将文件夹解析为
E:\a\b\/*.txt>(正确),就会添加完整的
。/*.txt
(错误的部分,相对文件夹引用应该与文件掩码分离),然后枚举
E:\a\b\/*.txt
(即
E:\a\*.txt

现在,如果我们使用当前active directory创建一个更深层的层次结构(
E:\a\b\c\d
),那么可以通过将请求替换为
dir./../*.txt“
来测试此行为。在这种情况下,起始文件夹将解析为
E:\a\b
,但随着
“../../*.txt”
的追加,最后将枚举根文件夹

注意:目前我手头没有一个调试器可以保证100%的安全性,但是它已经在
Api监视器下运行
cmd
实例进行了测试,Api调用显示了所描述的行为。

请不要交叉发布。看见你已经问过了。