Войти

Показать полную графическую версию : [решено] Удалить папки по маске


run0ut
21-05-2009, 14:57
Нужно удалить с определённого диска все папки по маске. Если пишу :
>for /D /R D:\ %i in (*Path*) do rmdir /S /Q "%i"
то все прекрасно работает. Если кидаю это в cmd скрипт и запускаю его, то в ответ вижу:
Непредвиденное появление: i.

Что я делаю не так?

gora
21-05-2009, 15:15
Что я делаю не так? »
Переменная цикла в .bat файле должна предваряться двойным (%%i) знаком процента, а не одинарным (%i) как в ком. строке.

qaaqasqad
20-03-2017, 16:08
Здравствуйте!
Задача: нужно удалить все папки *M A S K A* только из корня каталога F L D R , но не из вложенных в него папок (и всё упомянутое может иметь пробелы в именах).
Например, такой скрипт

for /f "delims=" %%i in ('dir /b /s /ad "F L D R\*M A S K A*"') do (rd /s /q "%%i")
удаляет папки *M A S K A* в т.ч. и из вложенных папок каталога F L D R .
Нельзя ли в скрипте что-то изменить (или предложить новый)?

sov44
20-03-2017, 16:19
qaaqasqad, удалите ключ " /s", который отвечает за обработку вложенных папок.

qaaqasqad
20-03-2017, 17:18
sov44, спасибо!
(Я так понимаю, Вы о втором по счету ключе /s).
Если бы всё было так просто, не спрашивал бы. Что касается обоих ключей /s :
такой скрипт

for /f "delims=" %%i in ('dir /b /s /ad "F L D R\*M A S K A*"') do (rd /q "%%i")
почему-то удаляет папки *M A S K A* в т.ч. и из вложенных папок каталога F L D R ,
а такой скрипт

for /f "delims=" %%i in ('dir /b /ad "F L D R\*M A S K A*"') do (rd /s /q "%%i")
вообще ничего не удаляет.
Пожалуйста попробуйте у себя, подтвердите или опровергните.

sov44
20-03-2017, 17:40
for /f "delims=" %%i in ('dir /b /ad "F L D R\*M A S K A*"') do rd /q "%%i"
Батник должен лежать рядом с папками. Если в в именах папок имеется кириллица, батник сохранять в 866 кодировке.

qaaqasqad
20-03-2017, 18:40
sov44,
Для чистоты эксперимента попробовал на WinXP SP3 pro (свежеустановленная с ориг CD, без обновлений),
однострочный .cmd и папка F L D R лежат на одном и том же уровне - в корне диска C:\ ,
кирилица не используется (кодировка 1251).
Вариант из Вашего сообщения не удаляет ничего...
При добавлении в этот же .cmd первого по счету ключа /s - удаляет "и в корне, и в подпапках" вне зависимости от наличия или отсутствия второго по счету ключа /s .
(самому смешно)

Iska
20-03-2017, 18:57
Вариант из Вашего сообщения не удаляет ничего... »
Ну, почему сразу «ничего». Вот, скажем, если рядом с «F L D R» окажутся папки, совпадающие с найденными внутри «F L D R» именами папок по шаблону «*M A S K A*» — он их, несомненно, удалит ;).

При добавлении в этот же .cmd первого по счету ключа /s - удаляет "и в корне, и в подпапках" вне зависимости от наличия или отсутствия второго по счету ключа /s .
(самому смешно) »
Ничего смешного, как заказали, так и работает.

for /f "usebackq delims=" %%i in (`2^>nul dir /b /a:d "F L D R\*M A S K A*`) do echo rd /q "F L D R\%%i"

qaaqasqad
20-03-2017, 23:29
Iska,
спасибо за "F L D R\%%i" !:up:
Я думаю, здесь

(rd /s /q "F L D R\%%i")
ключ /s необходим, т.к. без него будут удаляться только пустые папки *M A S K A*.
Вариант из Вашего сообщения у меня почему-то не удаляет никакие (даже пустые) папки *M A S K A* "ни в корне, ни в подпапках"... :idontnow:
В общем, суммировав всё подсказанное, пришел к такому:

for /f "delims=" %%i in ('dir /b /a:d "F L D R\*M A S K A*"') do (rd /s /q "F L D R\%%i")
Этот скрипт (как для меня-новичка :)) реально удаляет все (в т.ч. непустые) папки *M A S K A* только из корня каталога F L D R , но не из вложенных в него папок (и всё упомянутое может иметь пробелы в именах). Если не прав - поправьте...

Iska
21-03-2017, 01:27
Я думаю, здесь
(rd /s /q "F L D R\%%i")
ключ /s необходим, т.к. без него будут удаляться только пустые папки *M A S K A*.

Если не прав - поправьте...»
Правы.




© OSzone.net 2001-2012