Warum ist das Abrufen des Dateinamens langsam, wenn ein Stapelskript von einem UNC-Pfad aus ausgeführt wird, der vollständige Dateipfad jedoch ziemlich schnell gedruckt wird?

344
ggaur

Hier ist das Batch-Skript, das auf einem Remote-Computer vorhanden ist: test.cmd

 @echo off echo %TIME% echo batch file path = %0 echo %TIME% echo file name without extension = %~n0 echo %TIME% echo file name with extension = %~nx0 echo %TIME% 

Wenn ich es ausführe, ist es überraschend schnell, den vollständigen Pfad zu erhalten, aber die Informationen zum Dateinamen sind ziemlich langsam. Kann jemand bitte erklären, warum das so ist?

Microsoft Windows [Version 6.3.9600] (c) 2013 Microsoft Corporation. All rights reserved.  C:\Users\Gaurav>\\remote-machine\F$\Users\Gaurav\test.cmd 4:37:47.35 batch file path = \\remote-machine\F$\Users\Gaurav\test.cmd 4:37:47.35 file name without extension = test 4:37:54.21 file name with extension = test.cmd 4:38:01.07 

Zeitpläne für den lokalen Lauf:

F:\Users\Gaurav>test.cmd 8:32:01.45 batch file path = test.cmd 8:32:01.45 file name without extension = test 8:32:01.45 file name with extension = test.cmd 8:32:01.45 
0
Nun, '% 0' erfordert keine Erweiterung durch die Shell, aber '% ~ n0' tut dies, und `% ~ nx0` erweitert sich wahrscheinlich zweimal. Wenn Sie eine Erweiterung anfordern, muss die Batchdatei zusätzlichen Code in der Shell aufrufen, um den Pfad kontextuell zu erweitern. Dies dauert mehr Zeit, als einfach% 0 auszugeben, das bereits vor dem ersten Timer vorhanden war. Frank Thomas vor 5 Jahren 0
@FrankThomas Aber wenn ich dasselbe auf dem lokalen Rechner mache, geht das recht schnell. Wie spielt die Erweiterung eine Rolle im Netzwerkpfad? Die Frage selbst wurde mit Details zum lokalen Lauf bearbeitet. ggaur vor 5 Jahren 0
Die Ausführung einer CMD- oder BAT-Datei über einen Netzwerkpfad ist immer viel langsamer als die Ausführung einer lokalen Kopie. CMD ist dabei sehr ineffizient. Das könnte der ganze Grund dafür sein. Tonny vor 5 Jahren 0
weil die Shell-Erweiterung eines UNC-Pfads sehr viel mehr erfordert als das Erweitern eines statischen lokalen Pfads. Basierend auf Ihren Timings fragt SMB nach Informationen über den Pfad. Die Hostname-Komponente folgt den gleichen Regeln für die Suche wie alle SMB-Pfade. ... Frank Thomas vor 5 Jahren 0

0 Antworten auf die Frage