Назад | Перейти на главную страницу

как получить полный путь к открытому файлу

У меня есть сценарий, который запускается на сервере Windows для выполнения операций с определенными файлами. Сценарий часто дает сбой, потому что у разных пользователей (даже у меня) есть открытые общие файловые ресурсы на сервере, которые они забыли закрыть, поэтому папки заблокированы.

Я добавил код для проверки открытых файлов с помощью net file, и закройте их, если они соответствуют определенным шаблонам. Ограничение в том, что net file суммирует путь к открытым файлам, например

ID         Path                                    User name            # Locks
-------------------------------------------------------------------------------
2          C:\Program Files\...\cocoon-2.1.11\     huttarl               0

когда полный путь к открытому файлу

C:\Program Files\Apache Software Foundation\cocoon-2.1.11

Поэтому, когда мой сценарий проверяет, соответствует ли путь к файлу определенному шаблону, например «Apache», он иногда пропускает файлы с ... посреди их net file листинг.

Итак, мой вопрос: как я могу получить полный путь к открытому файлу в скрипте?

В настоящее время я использую cygwin / bash. Так что, если мне придется перейти на WSH, придется кое-что перенести. Но если это единственный вариант, я сделаю это.

Если это важно, на панели системной информации указано, что моя версия Windows - это Windows Server Standard, (c) 2007, SP2.

Я нашел следующее полезным:

openfiles /query /v | findstr "string what You want"

Вы должны использовать PsFile

Об этом

Команда «net file» показывает список файлов, открытых другими компьютерами в системе, в которой вы выполняете команду, однако она обрезает длинные имена путей и не позволяет вам видеть эту информацию для удаленных систем. PsFile - это утилита командной строки, которая показывает список файлов в системе, которые открываются удаленно, а также позволяет закрывать открытые файлы по имени или идентификатору файла.

А ... похоже, я нашел это год или больше назад.

Оказывается, если вы дадите net file идентификатор открытого файла, будет выведен полный путь.

Итак, для моего примера в вопросе, если я набрал

C:\>net file 2

я бы получил

File ID         2
User name       huttarl
Locks           0
Path            C:\Program Files\Apache Software Foundation\cocoon-2.1.11\
Permissions     (none)
The command completed successfully.

Использование этой функции означало бы

  • анализ идентификационных номеров из вывода начального net file команда
  • перебирая их и звоня net file снова с каждым идентификатором
  • тестирование второго выхода
  • и закрытие файлов, пути к которым соответствуют шаблону.

В то время как с PSFile я мог сделать все это с помощью одной простой команды. Но с net use, Мне не нужно устанавливать стороннее программное обеспечение, когда мы переносим сценарий на новый сервер. Решения, решения ...