1. Резюме
Я не смог найти, как разблокировать или удалить заблокированную папку со всеми подпапками через интерфейс командной строки.
2. Аргументация
Я работаю над проектом. Например, моя папка исходников — sources
, папка вывода — output
. Я просматриваю файлы и/или вношу тестовые изменения в output
→ Я добавляю изменения в sources
→ Я запускаю команду сборки ( build
например, ), которая должна перезаписать output
. Но build
запускается некорректно:
Папка используется
Действие не может быть завершено, так как папка или файл в ней открыты в другой программе.
Закройте папку или файл и повторите попытку.
Поэтому перед каждым build
запуском я открывал LockHunter → разблокировал output
→ запустил build
.
Было бы неплохо, если бы можно было запустить команду на разблокировку или удаление output
заранее build
, чтобы не нужно было каждый раз вручную запускать LockHunter, тратя на это время.
3. МКВЭ
Я создал папку KiraUnlockCLI
→ открыл командную строку → переместил в KiraUnlockCLI
нее ( cd KiraUnlockCLI
) → KiraUnlockCLI
заблокировал:
Мне нужно разблокировать или удалить KiraUnlockCLI
программно.
4. Требования
Любой тип программы может блокировать
output
папку и/или файлы в ней, примеры:- проводник Виндоус
- Командная строка
- Текстовый редактор
- Браузер
- Просмотрщик изображений
Решение должно разблокировать папки, а не только файлы. Я могу открыть в сторонних программах любые файлы в
output
и ее подпапках.- Должны поддерживаться относительные пути.
output
находится в разных каталогах для меня, других разработчиков и Continuous Integration (Travis CI, AppVeyor).
5. Не помогло
5.1 Относительные пути
LockHunterне поддерживает относительные пути.
В начале сентября 2019 года янаписал вопрос→ Я рассказал о своей проблеме вФорма обратной связи LockHunter→ Я не получил никаких отзывов.
5.2 Поддержка папок
Эти программы могут разблокировать файлы, но не папки.
-
FileASSASSIN /unlock /silent KiraUnlockCLI
5.3 Конкретный PID
- Ручка— Для разблокировки требуются PID. Но мне нужно убить процессы с любым PID; см. пункт 4.1 моего вопроса.
5.4.Графический интерфейс пользователя
Мне не удалось найти никакой информации об интерфейсе командной строки этих программ:
5.5 Не работает
rm -rf KiraUnlockCLI
(rm
отGnuWin32):/usr/bin/rm: cannot remove 'KiraUnlockCLI`: Device or resource busy
ОткрытыеФайлыПросмотр— никакого эффекта после этой команды:
openedfilesview /closefolder closeprocess killprocess KiraUnlockCLI
Разблокировщик—
unlocker D:\SashaDebugging\KiraUnlockCLI
:Ручка блокировки не найдена.
Однако Unlocker может помочь вам справиться с этим объектом.
Выберите действие, которое вы хотите выполнить над объектом.
DeadLockне могу разблокировать папки через интерфейс командной строки. Смотритемоя проблемав систему отслеживания ошибок DeadLock.
6. Не предлагайте
- Я знаюпобочные эффекты; пожалуйста, не говорите мне, что мне не нужна папка разблокировки.
Прежде чем опубликовать свой вопрос, я прочитал следующие вопросы SuperUser и ответы на них:
- Невозможно удалить пустую папку, так как она используется
- Есть ли способ справиться с заблокированным файлом из командной строки и освободить его?
- Как удалить используемую папку?
- Удалить каталог из командной строки Windows, даже если он был открыт в программе
- Удалить заблокированный файл/папку из командной строки
Я проверил программы изэтот списокна сайте Unlocker.
решение1
С тех пор, как я нашел IOBit Unlocker (~10 лет назад), я перестал использовать все, что вы предоставили, и несколько других, почему? Он на самом деле удаляет файлы/папки, несмотря ни на что, имеет понятный интерфейс, и вы также можете автоматизировать (как вы и просили). Несколько лет спустя я наткнулся на онлайн-статью, в которой говорилось, что он даже удаляет файлы Avast AV, которые защищены и используются.
Если хотите, можете установить и оставить всё как есть или просто получить файлы и использовать их автономно (используйте IObitUnlocker.exe /?
для просмотра справки по командной строке):
Установлен:
IObitUnlocker.exe /Delete /Advanced <folder>
Автономно:
cd <app folder>
sc create IObitUnlocker type= kernel start= demand binPath= "IObitUnlocker.sys"
IObitUnlocker.exe /Delete /Advanced <folder>
sc delete IObitUnlocker
rd /S /Q %AllUsersProfile%\IObit
Недостатком автоматизации является то, что после действия отображается сообщение, но вы можете использовать timeout /T <time> && taskkill /IM IObitUnlocker.exe
. <time>
Зависит от содержимого/иерархии папок, количества используемых файлов, скорости вашей системы и загрузки ЦП/жесткого диска). Имейте в виду, что для разблокировки необходимо повышение прав.
Если вы используете AutoHotKey, то закрытие диалоговых окон (и любое взаимодействие с пользовательским интерфейсом, которое вы только можете придумать) автоматизировать очень просто.
SetTimer, DismissUnlocker, 1000
DismissUnlocker() {
If WinExist("IObit Unlocker ahk_class #32770")
ControlClick, Button1
}