не могу удалить папку из пакета - папка или файл открыты в другой программе

сделал поиск по этому, но мало радости. Я делаю и позже, пытаясь удалить папку в том же командном файле:

mkdir "%_gameKey%"
:: Stuff.....
rmdir /s /q "%_gameKey%"

Я получаю сообщение об ошибке «Процесс не может получить доступ к файлу, потому что он используется другим процессом». Я также не могу удалить папку с помощью правой кнопки мыши - та же ошибка. Интересно, что rmdir удаляет содержимое папки. В папке ничего нет, и нет ничего очевидного доступа к ней.

Я использовал Unlocker - не показывает процессов. Также использовал Process Explorer, искал по имени папки (с / без полного пути) - нет результатов поиска.

Когда я перезагружаю свою машину, я могу удалить ее. Не уверен, если до разрешений пользователя. Из этого я вижу, что пользователи имеют только чтение/запись, а не полный контроль. (извините - не очень хорошо с правами пользователя - особенно в Windows!). Однако, конечно, этого не может быть, так как я могу удалить его при перезапуске.

Папка находится на диске, отличном от ОС.

Я в тупике - есть идеи?


person stigzler    schedule 03.11.2014    source источник


Ответы (3)


Папка не может быть удалена в Windows, если какое-либо приложение использует эту папку в качестве рабочего каталога.

В вашем случае я предполагаю, что пакетный файл использует команду cd для изменения рабочего каталога на созданный каталог. Поэтому вам нужно использовать cd еще раз, чтобы установить другой рабочий каталог, прежде чем использовать команду rmdir для удаления этого каталога.

Конечно, не рекомендуется запускать другие приложения с рабочим каталогом, который в настоящее время является каталогом, который следует удалить позже и который продолжает работать после выхода из командного файла, поскольку эти запущенные приложения также имеют этот каталог в качестве рабочего каталога.

person Mofi    schedule 03.11.2014

Мое слово - это было неясно, но, наконец, нашел ответ, пройдясь по коду, помещая rmdir в разные места. Я размещаю это здесь, если кто-то столкнется с тем же...

По сути, я вызывал подсказки cmd и запускал внешние исполняемые файлы, находясь в указанной папке. Позже я принудительно закрывал исполняемые файлы с помощью TaskKill, но при этом консоли cmd оставались открытыми на пути к каталогу, который я пытался удалить. постараюсь понятнее....

Пока пакетный скрипт находился в каталоге (например, C:\Windows\Scripts\Launch), я использовал следующую команду:

Start "AppLaunch" Call "!_supExe!" !_supCmd!

Что после расширения переводится, например, на:

Start "AppLaunch" Call "C:\Windows\Program Files(x86)\Troubleshooter\trbshtr.exe" -game "My Game"

Я использовал это, потому что, по чтению, в Windows есть ошибка, из-за которой следующая команда не работает:

Start "AppLaunch" "C:\Windows\Program Files(x86)\Troubleshooter\trbshtr.exe" -game "My Game" 

Проблема возникает, когда вам нужно использовать кавычки как для исполняемого файла, так и для параметров (например, там, где есть пробелы). Windows не читает это правильно. Таким образом, пришлось использовать самый верхний для запуска этих приложений.

Проблема в том, что при использовании:

taskkill /f /im trbshtr.exe

exe был убит, а командная строка - нет. Использование /b в команде «Пуск» не имело значения.

Итак, решение было - перейти из каталога в тот, который пакетный скрипт не изменяет перед запуском других приложений с помощью вышеуказанного. Работа выполнена....

Теперь осталось только закрыть все эти открытые окна cmd (или окна в taskmgr, если я использую переключатель /b). Это, вероятно, тема для другого поиска или темы!

person stigzler    schedule 03.11.2014

У меня была такая же проблема после запуска процесса powershell из папки через win cmd.
После завершения powershell я cd .. в win CMD, но rd /q /s выдал ошибку: открыть в другом процессе
я получаю та же ошибка при ручном удалении папки в окне проводника, даже если она была пустой.

wmic process показал, что powershell.exe может блокировать папку, хотя powershell завершил задачу и окно powershell закрылось. Это подтвердил tasklist

Я то taskkill /im powershell.exe, после чего папку можно было удалить.

person Zimba    schedule 23.03.2020