【问题标题】:Strange behavior with dir "../*.*" (Note the forward slash)dir "../*.*" 的奇怪行为(注意正斜杠)
【发布时间】:2017-01-27 08:55:27
【问题描述】:

具有以下文件夹结构:

  • 一个[目录]
    文件.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

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

【问题讨论】:

标签: cmd directory


【解决方案1】:

是的,dir 标记器中存在错误。

dir 命令将尝试将请求的 path+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% 安全,但它已经在 Api Monitor 和 api 下运行 cmd 实例进行了测试调用显示所描述的行为。

【讨论】:

    猜你喜欢
    • 2019-04-09
    • 2022-08-11
    • 2013-11-02
    • 2014-03-16
    • 2015-03-24
    • 1970-01-01
    • 2011-08-30
    • 2012-06-21
    • 2010-12-05
    相关资源
    最近更新 更多