Почему получение имени файла происходит медленно, когда пакетный скрипт выполняется по UNC-пути, но печать полного пути к файлу довольно быстрая?
180
ggaur
Вот пакетный скрипт, присутствующий на удаленной машине: 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%
Когда я выполняю его, неожиданно получается получить полный путь довольно быстро, но получить информацию об имени файла довольно медленно. Может кто-нибудь объяснить, почему это так?
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
Сроки для местного запуска:
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» не требует расширения оболочкой, но «% ~ n0» делает, а «% ~ nx0», вероятно, расширяется в два раза. Когда вы запрашиваете расширение, пакетный файл должен вызывать дополнительный код в оболочке для контекстного расширения пути, и это занимает больше времени, чем простое отображение% 0, которое уже было до запуска первого таймера.
Frank Thomas 5 лет назад
0
@FrankThomas Но если я делаю то же самое на локальной машине, это довольно быстро. Так как же расширение играет роль в сетевом пути? Отредактировал сам вопрос с подробностями локального прогона.
ggaur 5 лет назад
0
Выполнение любого файла CMD или BAT по сетевому пути всегда намного медленнее, чем выполнение локальной копии. CMD ОЧЕНЬ неэффективен в этом. Это может быть единственной причиной этого.
Tonny 5 лет назад
0
потому что расширение оболочки пути UNC включает в себя гораздо больше, чем расширение статического локального пути. Исходя из вашего времени, он запрашивает у SMB информацию о пути, поэтому компонент имени хоста будет следовать тем же правилам поиска, что и все пути SMB (сначала проверьте файл хоста, затем список браузеров, затем dns, затем широковещательную / многоадресную рассылку). ...
Frank Thomas 5 лет назад
0
0 ответов на вопрос
Похожие вопросы
-
3
Как я могу "инвертировать" структуру каталогов?
-
2
.profile в Mac OS X?
-
1
Приостановить все, кроме x задач, интенсивно использующих процессор
-
-
7
Запустить синергетический клиент при загрузке в Mac OS X
-
6
Какие функции Zsh вы используете?
-
4
Как синхронизировать скрипты GreaseMonkey между компьютерами?
-
5
Прозрачная командная строка в Vista?
-
4
Используйте портфель Windows из командной строки
-
4
Почему некоторые команды не существуют?
-
11
Есть ли простой способ разделить mp3 файлы?