2016-09-19 2 views
2

Имея следующую структуру папок:Странное поведение с директории "../*.*" (Обратите внимание, слэш)

  • А [Dir]
    File.txt
    • В [Направл ]
      • С [Dir]

Текущий рабочий каталог на C

Если я

DIR "..\File.txt" 

Я не получаю файлы и что, как ожидается, так как B пусто.

Однако если я

DIR "../File.txt"   --> Note the/instead of the \ 

Я получаю файл в 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

Пожалуйста, сделайте ** ** ** перекрестный стол. См. [Перекрестно размещать вопрос на нескольких сайтах обмена стеками, разрешенных, если вопрос по теме для каждого сайта?] (Https://meta.stackexchange.com/a/64069). Вы уже спросили [это] (https://superuser.com/questions/1125897/strange-behavior-with-dir-note-the-forward-slash) в [su]. – DavidPostill

ответ

1

Да, в токенизаторе dir есть ошибка.

dir команда попытается разрешить запрошенный путь + fileMask до полного пути к каталогу, а затем добавит маску файла (или добавит *) для перечисления файлов внутри разрешенного пути.

Любопытно, что разрешение папка не имеет каких-либо проблем, чтобы определить, что исходная папка должна быть (Directory of 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% гарантия безопасности этого, но он был протестирован работает cmd экземпляра под Api Monitor и вызовы API показывает, описанное поведение.

Смежные вопросы