У меня есть сценарий, который запускается на сервере 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
, Мне не нужно устанавливать стороннее программное обеспечение, когда мы переносим сценарий на новый сервер. Решения, решения ...