Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Удалить папки по маске (http://forum.oszone.net/showthread.php?t=140719)

run0ut 21-05-2009 14:57 1123981

Удалить папки по маске
 
Нужно удалить с определённого диска все папки по маске. Если пишу :
Код:

>for /D /R D:\ %i in (*Path*) do rmdir /S /Q "%i"
то все прекрасно работает. Если кидаю это в cmd скрипт и запускаю его, то в ответ вижу:
Код:

Непредвиденное появление: i.
Что я делаю не так?

gora 21-05-2009 15:15 1124000

Цитата:

Цитата run0ut
Что я делаю не так? »

Переменная цикла в .bat файле должна предваряться двойным (%%i) знаком процента, а не одинарным (%i) как в ком. строке.

qaaqasqad 20-03-2017 16:08 2721366

Здравствуйте!
Задача: нужно удалить все папки *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 2721372

qaaqasqad, удалите ключ " /s", который отвечает за обработку вложенных папок.

qaaqasqad 20-03-2017 17:18 2721403

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 2721410

Код:

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 2721426

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

Iska 20-03-2017 18:57 2721431

Цитата:

Цитата qaaqasqad
Вариант из Вашего сообщения не удаляет ничего... »

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

Цитата:

Цитата qaaqasqad
При добавлении в этот же .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 2721516

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 2721545

Цитата:

Цитата qaaqasqad
Я думаю, здесь
Код:

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

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

Правы.


Время: 03:12.

Время: 03:12.
© OSzone.net 2001-