MOVEFILE — утилита командной строки Windows, которая регистрирует отложенную операцию перемещения или удаления файла. Если файл заблокирован работающим процессом и его нельзя удалить или переместить прямо сейчас, MOVEFILE ставит задачу в очередь — она выполнится на ранней стадии следующей загрузки системы, до запуска пользовательских процессов.
- Синтаксис команды MOVEFILE
- Ключи и параметры
- Примеры использования
- Удаление заблокированного файла при перезагрузке
- Перемещение занятой DLL для замены версии
- Замена системного файла новой версией
- Удаление папки с временными файлами
- Проверка зарегистрированных операций
- Отмена зарегистрированной операции через реестр
- Частые ошибки и решения
- Когда применять, а когда нет
- FAQ
- Нужно ли перезагружать компьютер сразу после запуска MOVEFILE?
- Можно ли зарегистрировать несколько операций подряд?
- Работает ли MOVEFILE с папками?
- Что будет, если файл-источник не найден при перезагрузке?
- Есть ли встроенная альтернатива MOVEFILE в Windows?
- Нужны ли права администратора?
Синтаксис команды MOVEFILE
movefile <источник> [<назначение>]
Параметры:
<источник>— полный или относительный путь к файлу, который нужно переместить или удалить.[<назначение>]— путь назначения. Если параметр не указан или задана пустая строка (""), файл будет удалён при перезагрузке.
Команда не входит в стандартный дистрибутив Windows — она доступна через Sysinternals Suite от Microsoft (утилита movefile.exe). Перед использованием убедитесь, что исполняемый файл находится в папке из переменной PATH, либо запускайте её с полным путём.
Ключи и параметры
| Параметр | Описание | Пример |
|---|---|---|
<источник> | Путь к файлу или папке, которую нужно переместить или удалить при перезагрузке. Поддерживаются абсолютные пути. | C:\Windows\Temp\locked.dll |
<назначение> | Новое расположение файла. Если пропущен или равен "" — файл удаляется. | C:\Backup\locked.dll |
| (без параметров) | Вывод краткой справки по синтаксису. | movefile |
У утилиты нет дополнительных ключей-флагов — вся логика определяется наличием или отсутствием второго аргумента.
Примеры использования
Удаление заблокированного файла при перезагрузке
Файл update.tmp удерживается процессом установщика и не удаляется вручную. Чтобы удалить его при следующей загрузке:
movefile "C:\Windows\Temp\update.tmp" ""
Пустая строка в качестве назначения сигнализирует системе: файл нужно удалить, а не переместить. При перезагрузке Windows выполнит операцию до входа пользователя.
Перемещение занятой DLL для замены версии
При обновлении драйвера старая .dll может быть заблокирована системой. Переместите её в архив, чтобы после перезагрузки освободить место для новой:
movefile "C:\Windows\System32\olddriver.dll" "D:\Archive\olddriver.dll"
После перезагрузки файл окажется в D:\Archive\, а исходное место освободится.
Замена системного файла новой версией
Если нужно заменить системный файл обновлённым, поместите новую версию рядом и зарегистрируйте операцию замены:
movefile "C:\Tools\newfile.exe" "C:\Windows\System32\targetfile.exe"
При следующей загрузке Windows переместит newfile.exe поверх targetfile.exe.
Удаление папки с временными файлами
Иногда каталог с кешем заблокирован антивирусом или службой. Зарегистрируйте удаление всего каталога:
movefile "C:\Users\user\AppData\Local\Temp\LockedCache" ""
Папка будет удалена при следующей перезагрузке. Убедитесь, что каталог не содержит данных, которые нужно сохранить.
Проверка зарегистрированных операций
Все отложенные операции MOVEFILE хранятся в реестре. Просмотреть их можно через PowerShell:
Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager" -Name PendingFileRenameOperations
Вывод покажет список файлов, которые система переместит или удалит при следующей загрузке. Здесь же можно удалить запись, если передумали выполнять операцию.
Отмена зарегистрированной операции через реестр
Если нужно отменить запланированное удаление, удалите соответствующую запись из реестра до перезагрузки:
Remove-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager" -Name PendingFileRenameOperations
Это очистит все зарегистрированные отложенные операции. Используйте с осторожностью, если другие программы тоже поставили задачи в очередь.
Частые ошибки и решения
| Ошибка / симптом | Причина | Решение |
|---|---|---|
'movefile' is not recognized... | Утилита не установлена или не находится в PATH. | Скачайте Sysinternals Suite с сайта Microsoft, распакуйте movefile.exe в C:\Windows\System32 или добавьте папку в PATH. |
| Операция не выполнилась после перезагрузки | Команда была запущена без прав администратора — запись в реестр не создалась. | Запускайте командную строку от имени администратора (Запуск от имени администратора). |
| Файл по-прежнему существует после перезагрузки | Путь к файлу содержит пробелы и не взят в кавычки, либо указан относительный путь. | Всегда используйте абсолютные пути и заключайте их в двойные кавычки: movefile "C:\My Folder\file.tmp" "" |
| Файл назначения уже существует — замена не произошла | Windows не перезаписывает файл назначения автоматически при конфликте имён. | Предварительно зарегистрируйте удаление файла назначения через отдельный вызов MOVEFILE, а затем зарегистрируйте перемещение. |
| Очередь операций не очищается между перезагрузками | Несколько программ добавили записи в PendingFileRenameOperations, и некоторые из них не выполнились. | Проверьте реестр вручную, удалите лишние строки или очистите ключ полностью, если операции больше не нужны. |
Когда применять, а когда нет
MOVEFILE уместна, когда файл заблокирован работающим процессом и стандартные методы (Проводник, del, move) возвращают ошибку доступа. Типичные случаи: замена системных библиотек, удаление временных файлов установщика, ротация логов, удерживаемых службами. Команда требует прав администратора и работает только с файлами на локальных дисках — сетевые пути не поддерживаются. Не используйте MOVEFILE для массового переименования каталогов с вложенными файлами: утилита оперирует одним путём за вызов. Аналог в PowerShell — прямая запись в реестровый ключ PendingFileRenameOperations или использование .NET-метода [System.IO.File]::Move() в сочетании с планировщиком задач.
FAQ
Нужно ли перезагружать компьютер сразу после запуска MOVEFILE?
Нет. Операция зарегистрирована в реестре и выполнится при любой следующей перезагрузке — хоть через минуту, хоть через несколько дней. До перезагрузки файл остаётся на месте.
Можно ли зарегистрировать несколько операций подряд?
Да. Каждый вызов MOVEFILE добавляет новую запись в список PendingFileRenameOperations. Все зарегистрированные операции выполнятся последовательно при следующей загрузке.
Работает ли MOVEFILE с папками?
С пустыми папками — да. Папки с содержимым командой не удаляются: сначала нужно зарегистрировать удаление всех файлов внутри, а затем самой папки.
Что будет, если файл-источник не найден при перезагрузке?
Windows пропустит операцию без сообщения об ошибке и продолжит загрузку. Запись из реестра при этом удаляется.
Есть ли встроенная альтернатива MOVEFILE в Windows?
Начиная с Windows Vista, аналогичный механизм реализован через API-функцию MoveFileEx с флагом MOVEFILE_DELAY_UNTIL_REBOOT. Именно её использует MOVEFILE внутри. Для ручного управления очередью удобнее редактировать реестровый ключ HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations напрямую.
Нужны ли права администратора?
Да. Запись в ключ реестра HKLM требует прав администратора. Запуск MOVEFILE от обычного пользователя завершится без эффекта или с ошибкой доступа.


