Мое прокомментированное предложение в качестве ответа для запуска из командной строки :
For /F "Delims=" %A In ('Dir /B/S/A-D-S-L "Z:\Open Notebook.onetoc2" 2^>NUL')Do @If Not Exist "%~dpA*.one" Del /A/F "%A"
Основано на синтаксисе For /F
: For /F ["options"] %variable In ('command')Do command [command-parameters]
Сначала нам нужно взятьпосмотрите на 'command'
. Мы хотим вывести все файлы с корнем в Z:\
с именем Open Notebook.onetoc2
, мы делаем это, используя Dir
, (введите dir /?
для его использования) . В целях безопасности я исключил из этого вывода все системные файлы или точки повторной обработки и перенаправил любое сообщение об ошибке на устройство NUL
, которое предотвращает передачу любого сообщения, если оно не существует, на Do
.
Цикл For
передает каждый файл как полный путь к Do
как метавариабельный %A
. Сначала мы хотим убедиться, что наряду с любым возвращенным файлом другой файл с расширением .one
не существует. Для этого мы используем условие If Not Exist
, (синтаксис см. if /?
) . %A
может быть расширен только на его диск и путь, (т.е. родительский каталог любого возвращенного Open Notebook.onetoc2
файла) , используя %~dpA
, (этот синтаксис доступен в For
справочная информация о команде, for /?
) .
Если условие выполнено, мы удаляем файл с помощью команды Del
. Поскольку файлы могут быть доступны только для чтения, мы используем опции /A
и /F
, (синтаксис см. del /?
) .
Если вы хотите сделать то же самое, но из
пакетного файла , это будет выглядеть примерно так:
@For /F "Delims=" %%A In ('Dir /B/S/A-D-S-L "Z:\Open Notebook.onetoc2" 2^>NUL')Do @If Not Exist "%%~dpA*.one" Del /A/F "%%A"