Компьютерный форум 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=319891)

GIGABAIT 18-10-2016 14:41 2679396

Удалить папки в папках
 
Помогите сделать скрипт для удаление папок. Нужно удалить папки 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 2679411

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

GIGABAIT 18-10-2016 15:52 2679426

Цитата:

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

Это не важно.

Iska 18-10-2016 16:10 2679433

GIGABAIT, раз неважно — тогда возьмите в руки tree.exe и приведите нормальный пример.

GIGABAIT 18-10-2016 16:48 2679452

Цитата:

Цитата Iska
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 2679460

Странная какая-то задача, но...
Код:

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 2679462

Особо не проверялось. Тренируйтесь на копии, удалив 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 2679476

Цитата:

Цитата Iska
Особо не проверялось. Тренируйтесь на копии, удалив echo. »

Ваш код не работает.
Цитата:

Цитата Elven
Странная какая-то задача, но... »

Ваш работает но есть вопрос.
Возможно это нужно было сказать сначала , но я об этом чет не подумал...
Использовав команду "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 2679507

Цитата:

Цитата GIGABAIT
Ваш код не работает. »

Проверил. Работает.

GIGABAIT 19-10-2016 06:34 2679644

Цитата:

Цитата Iska
Проверил. Работает. »

Да , работает. Забыл сменить кодировку на 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.

Цитата:

Цитата Elven
Странная какая-то задача, но... »

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

GIGABAIT 19-10-2016 11:45 2679736

Цитата:

Цитата Elven
Странная какая-то задача, но...
Код:
Код:

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 2679752

Учитывая объемы проще написать прицельно удаление для нескольких папок, а не мутить скрипт с сомнительными условиями.
Хотя возможно прокатит что-то вроде:
Код:

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 во всех вложенных папках. По крайней мере попытается.


Время: 05:50.

Время: 05:50.
© OSzone.net 2001-