Войти

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


GIGABAIT
18-10-2016, 14:41
Помогите сделать скрипт для удаление папок. Нужно удалить папки Folder1 и Folder3 в папках со звездочкой.
Пример :

Folder1
{
Folder1*<<Folder1,Folder2,Folder3
Folder2*<<Folder1,Folder2,Folder3
Folder3*<<Folder1,Folder2,Folder3
Folder4*<<Folder1,Folder2,Folder3
Folder5*<<Folder1,Folder2,Folder3
}
"<<" значит что "Folder1,Folder2,Folder3" находятся в данной папке. "Куда смотрит клюв"

Iska
18-10-2016, 15:16
GIGABAIT, плохой пример: в именах файлов и каталогов FATx и NTFS не поддерживается символ «*».

GIGABAIT
18-10-2016, 15:52
GIGABAIT, плохой пример: в именах файлов и каталогов FATx и NTFS не поддерживается символ «*». »
Это не важно.

Iska
18-10-2016, 16:10
GIGABAIT, раз неважно — тогда возьмите в руки tree.exe и приведите нормальный пример.

GIGABAIT
18-10-2016, 16:48
GIGABAIT, раз неважно — тогда возьмите в руки tree.exe и приведите нормальный пример. »
Пример 2 :

D:.
├───Папка1
│ ├───Папка1 Удалить
│ ├───Папка2
│ └───Папка3 Удалить
├───Папка2
│ ├───Папка1 Удалить
│ ├───Папка2
│ └───Папка3 Удалить
├───Папка3
│ ├───Папка1 Удалить
│ ├───Папка2
│ └───Папка3 Удалить
├───Папка4
│ ├───Папка1 Удалить
│ ├───Папка2
│ └───Папка3 Удалить
└───Папка5
├───Папка1 Удалить
├───Папка2
└───Папка3 Удалить
Я не знаю почему сверху выбран диск "D" т.к должна была быть выбрана папка test т.к. все эти папки в папке test.
Я приписал к папке "Удалить" которою нужно удалить.

Elven
18-10-2016, 17:04
Странная какая-то задача, но...
pushd d:\test
for /f "delims=" %%i in ('dir .\ /a:d /b') do (
if exist "%%i\folder1" rd /s /q "%%i\folder1"
if exist "%%i\folder3" rd /s /q "%%i\folder3"
)
popd
Примерно так.
Если в названии папок присутствуют кирилические символы cmd\bat сохранять в 866 кодировке

Iska
18-10-2016, 17:06
Особо не проверялось. Тренируйтесь на копии, удалив echo.
for /d %%i in ("D:\test\*.*") do 2>nul (echo rd /s /q "%%~fi\Папка1" & echo rd /s /q "%%~fi\Папка3")

GIGABAIT
18-10-2016, 18:01
Особо не проверялось. Тренируйтесь на копии, удалив echo. »
Ваш код не работает.
Странная какая-то задача, но... »
Ваш работает но есть вопрос.
Возможно это нужно было сказать сначала , но я об этом чет не подумал...
Использовав команду "pushd d:\test" или цикл for найти в этой папке , в нашем случае это "d:\test" все папки c именем "blabla" и удалить , либо другое имя(не важно) ?
т.к. данный скрипт работает только с такой структурой папкой которую я выше кинул. т.к. я не думал что вы сделаете скрипт для данной структуры папок , а я думал что вы сделаете чтоб он проверил данную папку(в нашем случае это test) и все под- папки в ней на "blabla"(или другое имя) папки и удалит их .

P.S "forfiles" не подходит ?

P.S Сделал данный скрипт :
FORFILES /P . /M folder1 /S /C "cmd /c RD /S /Q @file"
Но нельзя ли добавить несколько масок ? Т.е где /M folder1 добавить еще к этому folder2 folder3
Но есть одна проблема из-за того что идет /S
он удаляет все папки с этим названием.
Пример 3:

├───materials
│ └───models (А он удаляет и эту : / но ее не нужно удалять.)
│ └───weapons



├───models "Хочу чтоб эту удалил и остальные ниже т.е (models scripts sound)"
│ └───weapons
├───scripts
│ └───weapons
└───sound
└───weapons

FORFILES /P . /M models /S /C "cmd /c RD /S /Q @file"
Я ввожу имя папки "models" и я хочу чтоб он удалил ту папку models которая не в каталоге materials , а он и ее удаляет : /
Или нужно сделать чтоб он удалял ВСЕ папки используя эту команду
FORFILES /P . /M models /S /C "cmd /c RD /S /Q @file"
кроме папки materials и ее подпапок.

Вообщем несколько раз дополнял , надеюсь понятно вышло.

Iska
18-10-2016, 19:52
Ваш код не работает. »
Проверил. Работает.

GIGABAIT
19-10-2016, 06:34
Проверил. Работает. »
Да , работает. Забыл сменить кодировку на 866.
Но нельзя ли сделать скрипт как я описал выше ?
Т.е он будет проверять "test" папку и ее подпапки на "folder1" папки и будет удалять их ? Но добавив маску на folder2 и в ней будет подпапка folder1 которую он не будет удалять. То-есть обратная маска ?
Пример 3 :

├───materials
│ └───models
│ └───weapons



├───models 1
│ └───weapons
├───scripts
│ └───weapons
└───sound
└───weapons
Я хочу чтоб он удалил models , scripts , sound. Но не models в materials. Почему мне нужно чтоб скрип проверял test и все подпапки ? Потому что в папке "test (не важно в какой)" разно уровневая система папок.
Пример 4 :

Test
├───Folder4
│ ├───Folder1
│ │ ├───Folder2
│ │ │ ├───Folder1
│ │ │ │ └───Folder2
│ │ │ │ └───Папка2
│ │ │ └───Folder3
│ │ │ └───Папка2
│ │ └───Folder3
│ │ └───Папка2
│ ├───Folder2
│ │ ├───Folder1
│ │ │ └───Folder2
│ │ │ └───Папка2
│ │ └───Folder3
│ │ └───Delthis ------------------
│ └───Folder3
│ ├───Folder1
│ │ ├───Folder2
│ │ │ ├───Folder1
│ │ │ │ └───Folder2
│ │ │ │ └───Папка2
│ │ │ ├───Folder3
│ │ │ │ └───Папка2
│ │ │ └───Папка2
│ │ └───Folder3
│ │ └───Папка2
│ └───Folder2
│ ├───Folder1
│ │ └───Folder2
│ │ └───Папка2
│ └───Folder3
│ ├───Folder1
│ │ ├───Folder2
│ │ │ ├───Folder1
│ │ │ │ └───Folder2
│ │ │ │ └───Папка2
│ │ │ └───Folder3
│ │ │ └───Папка2
│ │ └───Folder3
│ │ └───Папка2
│ └───Folder2
│ ├───Folder1
│ │ └───Folder2
│ └───Folder3
│ └───Delthis ------------------
└───Folder5
├───Folder1
│ ├───Folder1
│ │ ├───Folder2
│ │ │ └───Folder1
│ │ └───Folder3
│ ├───Folder2
│ └───Folder3
│ └───Folder3
├───Folder2
│ └───Папка2
└───Folder3
└───Delthis
В примере 4 видно что я хочу объяснить. Цикл или FORFILES должен пройтись по всем этим папкам и подпапкам , и удалить папки "folder3" с подпапкой delthis но не трогать другие папки folder3.

Странная какая-то задача, но... »
У меня 10 папок , в одной папке 3 папки , я хочу удалить эти 3 папки с помощью cmd т.к руками это делать долго.

GIGABAIT
19-10-2016, 11:45
Странная какая-то задача, но...
Код:
pushd d:\test
for /f "delims=" %%i in ('dir .\ /a:d /b') do (
if exist "%%i\folder1" rd /s /q "%%i\folder1"
if exist "%%i\folder3" rd /s /q "%%i\folder3"
)
popd
Примерно так.
Если в названии папок присутствуют кирилические символы cmd\bat сохранять в 866 кодировке »
Как в этот скрипт добавить еще один уровень подкаталога/подпапки ? Если файлы находятся глубже на 1 папку.

Elven
19-10-2016, 12:18
Учитывая объемы проще написать прицельно удаление для нескольких папок, а не мутить скрипт с сомнительными условиями.
Хотя возможно прокатит что-то вроде:
for /f "delims=" %%i in ('dir d:\test /s /a:d /b^|findstr Delthis$') do (
pushd "%%i" && cd ..\..
if exist "folder3" rd /s /q "folder3"
popd
)
как по мне вариант крайне извратный и требующий соблюдения строгих условий, которые, по крайней мере местами, пришлось додумывать самому. Скрипт удалит ВСЕ папки folder3 в которых есть папка Delthis во всех вложенных папках. По крайней мере попытается.




© OSzone.net 2001-2012