2016-09-19 1 views
2

den folgenden Ordner Struktur:Seltsames Verhalten mit dir "../*.*" (Beachten Sie den Schrägstrich)

  • A [Dir]
    File.txt
    • B [Dir ]
      • C [dir]

Aktuelles Arbeitsverzeichnis auf C ist

Wenn ich

DIR "..\File.txt" 

bekomme ich keine Dateien und dass zu erwarten ist, da B leer ist.

Allerdings, wenn ich

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

ich die Datei auf A erhalten !!!

Wenn ich

DIR "../*.*" 

ich die Datei in A und die dir Ausgabe zu erhalten, sagt die Datei an B ist !!!

Hier ist der Ausgang der DIR-Befehle:

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 

Wirklich seltsam. Weiß jemand, was passiert?

+1

Bitte tun ** nicht ** Crosspost. Siehe [Ist die Query-Veröffentlichung einer Frage auf mehreren Stack Exchange-Sites zulässig, wenn die Frage für jede Site On-Topic ist?] (Https://meta.stackexchange.com/a/64069). Du hast [this] bereits gefragt (https://superuser.com/questions/1125897/strange-behavior-with-dir-note-the-forward-slash) auf [su]. – DavidPostill

Antwort

1

Ja, im Tokenizer dir ist ein Fehler aufgetreten.

dir Befehl wird versuchen, den angeforderten Pfad + filemask zu einem vollständigen Verzeichnispfad zu lösen und dann wird es die Datei Maske (oder asume eine *) fügen Sie die Dateien innerhalb des aufgelösten Pfad aufzuzählen.

Merkwürdigerweise hat der Ordner Auflösung kein Problem, um zu bestimmen, was der Startordner (Directory of E:\a\b in Ihrer Ausgabe) sein sollte, aber das tokenizer hat ein Problem, das relativ Ordner Referenz aus der Dateimaske zu entfernen, wenn Schrägstriche verwendet werden, .

Das Ergebnis ist, dass, sobald der Ordner E:\a\b\ (korrekt) behoben wird, die vollen ../*.txt angehängt wird (falscher Teil, die relative Ordner Referenz aus der Dateimaske getrennt werden soll), und dann E:\a\b\../*.txt wird aufgezählt (dh , E:\a\*.txt) ohne Probleme

wenn wir nun eine tiefere Hierarchie (E:\a\b\c\d), mit d dem aktuellen Active Directory, dieses Verhalten erstellen kann durch das ersetzen der Anforderung an dir "../../*.txt" getestet werden. In diesem Fall wird der Startordner in E:\a\b aufgelöst, aber da der "../../*.txt" angehängt wird, wird am Ende der Stammordner aufgezählt.

note: in diesem Moment ich zu 100% sicher von dieser nicht einen Debugger zur Hand haben, aber es getestet wurde eine cmd Instanz unter Api Monitor und die api Anrufe zeigen das beschriebene Verhalten ausgeführt wird.