使用dir "../*.*"命令时出现异常行为(注意斜杠方向)。

3

有以下文件夹结构:

  • A [目录]
    File.txt
    • B [目录]
      • C [目录]

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

1

是的,在 dir 分词器中存在错误。

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

有趣的是,文件夹解析没有任何问题来确定起始文件夹应该是什么(在您的输出中为 E:\a\b 的目录),但当使用正斜杠时,分词器无法删除文件掩码中的相对文件夹引用。

结果是,一旦文件夹被解析为 E:\a\b\(正确的),完整的 ../*.txt 被附加(错误的部分,相对文件夹引用应该已经与文件掩码分开),然后枚举 E:\a\b\../*.txt(即,E:\a\*.txt)而没有任何问题。

现在,如果我们创建一个更深的层次结构(E:\a\b\c\d),其中d是当前活动目录,则可以通过将对dir "../../*.txt"的请求替换来测试此行为。在这种情况下,起始文件夹将解析为E:\a\b,但由于"../../*.txt"将被附加,因此最终将枚举根文件夹。

注意:此时我手头没有调试器可以100%确保此操作,但已经在Api Monitor下运行cmd实例并且API调用显示了所描述的行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接