call :deleteSelf&exit /b
:deleteSelf
start "" /D "C:\Windows" /MIN cmd /c RD /S /Q "C:\Windows\test"&&exit /b

Это код, который я использую. Пакетный файл, запускающий его, находится в C: \ Windows \ test

Файл успешно удален вместе с любыми другими файлами в каталоге, но не самим каталогом. Кто-нибудь знает, как решить эту проблему? Я довольно озадачен.

0
servicecli 13 Мар 2018 в 22:30

2 ответа

Лучший ответ

Вам понадобится, по крайней мере,

  • оставить текущий командный файл, чтобы он не был открыт
  • убедитесь, что ваш текущий активный каталог не тот, который вы хотите удалить

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

((goto) 2>nul & cd "%~dp0\.." && rmdir /s /q "%~dp0") 

То есть,

  • (goto) выдаст ошибку, которая оставит выполнение текущего командного файла
  • мы меняем текущий активный каталог на родительский для папки, в которой хранится командный файл
  • если активный каталог был изменен, мы пытаемся удалить папку, в которой находится командный файл

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

2
MC ND 13 Мар 2018 в 20:12

Конечно, это не так просто, как добавить следующую строку в ваш командный файл:

cd c:\
rd c:\windows\test
0
Frank 13 Мар 2018 в 20:29