Как рекурсивно удалить все файлы по заданному пути, кроме файлов с определенным расширением файла? - PullRequest
1 голос
/ 20 сентября 2019

Ответы, которые я нашел в Интернете, не работают, если имя каталога имеет пробел, например, «Camera Roll»

Я пытался поиграться с командой for / dir / findstr, но, похоже, ничего не происходитработа

Содержимое пакетного файла:

@echo off
for /f %%F in ('dir c:\Users\melov\Pictures /s/b/a-d ^| findstr  /v ".jpg"') do echo "%%F"
@echo on

Обратите внимание, я заменил команду DEL на ECHO, просто чтобы смоделировать проблему.

"c:\Users\melov\Pictures\desktop.ini"
"c:\Users\melov\Pictures\Camera" **(PROBLEM HERE)**
"c:\Users\melov\Pictures\ControlCenter4\Scan\CCF06182019.pdf"
"c:\Users\melov\Pictures\Saved" **(PROBLEM HERE)**
"c:\Users\melov\Pictures\Screenshots\desktop.ini"
"c:\Users\melov\Pictures\Screenshots\Screenshot"
"c:\Users\melov\Pictures\Screenshots\Screenshot"

Структура оригинальной папки

├───Camera Roll
├───ControlCenter4
│   ├───Email
│   ├───OCR
│   ├───Scan
│   └───SharePoint
├───cunha
├───Saved Pictures
└───Screenshots

1 Ответ

1 голос
/ 20 сентября 2019

cmd имеет разделитель по умолчанию, который является пробелом, поэтому вы просто указываете ему изменить разделитель по умолчанию.

@echo off
for /f "delims=" %%F in ('dir /b /s /a-d "c:\Users\melov\Pictures " ^| findstr  /v ".jpg"') do echo "%%F"

Аналогичный принципал, используя tokens=*

@echo off
for /f "tokens=*" %%F in ('dir /b /s /a-d "c:\Users\melov\Pictures " ^| findstr  /v ".jpg"') do echo "%%F"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...