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

DUNAEV78 27-09-2019 12:25 2889815

удалить из директории все папки, кроме папок указанных
 
Ребята Здравствуйте! помогите чайнику с таким вопросом, требуется удалить батником из директории где он и лежит, все папки независимо от того пустая она или нет, кроме папок с именем "оплата" и "реклама", буду признателен, заранее спасибо!

DJ Mogarych 27-09-2019 13:35 2889822

Powershell:
Код:

gci D:\temp\123 -Exclude Оплата,Реклама |% {Remove-Item "$($_.fullname)" -recurse -force -confirm:$false}

DUNAEV78 27-09-2019 13:42 2889824

DJ Mogarych, спасибо за отклик, НО у меня такой вопрос по путям, D:\temp\123 - у меня папка меняется каждый раз имя где лежит сам батник, наверное я думаю что будет удобнее указать относительный путь, а как это сделать? или может вообще не указывать?

DJ Mogarych 27-09-2019 13:52 2889828

Цитата:

Цитата DUNAEV78
у меня папка меняется каждый раз имя где лежит сам батник »

ничего не понял

D:\temp\123 - это путь, где лежат папки оплата и реклама

DUNAEV78 27-09-2019 14:34 2889833

DJ Mogarych, Имя папки где находится сам батник, и лежат эти папки "оплата" и "реклама", меняется постоянно имя, вот поэтому я и обратил внимание по поводу относительных путей!

megaloman 27-09-2019 14:36 2889834

Код:

@Echo Off
cls
rem        Set "BoxIn=Z:\Box_In"
        Set "BoxIn=%~DP0"
        Set Ex="оплата" "реклама"
Echo %Ex% &Pause

        Pushd "%BoxIn%" &&FOR /F "usebackq delims=" %%d IN (`2^>nul Dir /B /A:D`) DO Call :SomeDel "%%d" %Ex%
        Popd
Pause
Exit /B 0

:SomeDel
        If "%~2"=="" (Echo Rd /S /Q %1 &Exit /B 0)
        If /I "%~2"=="%~1" Exit /B 1
        Shift /2
GoTo :SomeDel

Скрипт сохранить в 866 кодировке. Echo %Ex% &Pause отладочная строка, чтобы Вы могли убедиться, что скрипт сохранён в нужной кодировке: имена папок-исключений должны читаться.
Echo перед RD в боевом варианте надо убрать.
Сейчас подпапки будут удаляться в папке со скриптом
В принципе, можно указать иной другой путь
Set "BoxIn=Z:\Box_In" а Set "BoxIn=%~DP0" при этом необходимо удалить

DUNAEV78 27-09-2019 14:41 2889836

megaloman, работает! правда подкупает строка у пользователя DJ Mogarych, коротко и скромно, но ваш работает

alpap 27-09-2019 15:18 2889840

Цитата:

Цитата DUNAEV78
подкупает строка »

Цитата:

Цитата DUNAEV78
коротко и скромно »

тоже надо в одну строку?
Код:

@echo off
for /f "delims= eol=" %%a in ('dir /a/b^|findstr /iv /c:"оплата" /c:"реклама" /c:"%~nx0"') do >nul 2>&1 del /q "%%a"& >nul 2>&1 rd /s /q "%%a"
pause

если только папки надо удалять, то ...dir /ad/b...
и убрать в конце ...>nul 2>&1 del /q "%%a"&

DUNAEV78 27-09-2019 15:42 2889851

HTML код:

for /f "delims= eol=" %%a in (^|findstr /iv /c:"оплата" /c:"реклама"') do >nul 2>&1 rd /s /q "%%a"
странно удаляет все папки , даже те которые не надо

alpap 27-09-2019 15:45 2889852

DUNAEV78, вы невнимательно читаете и изменили код неправильно, убрали кусок нужной операции, должно быть так только для папок:
Код:

for /f "delims= eol=" %%a in ('dir /ad/b^|findstr /iv /c:"оплата" /c:"реклама"') do >nul 2>&1 rd /s /q "%%a"
код должен быть в кодировке 866, иначе не найдет названия в кириллице и вероятно по этой причине тоже удалит.

DUNAEV78 27-09-2019 15:56 2889855

alpap, а если chcp 1251, да ну в прочем, работает, только удаляются все папки, а мне требуется удалять все папки кроме /c:"ОПЛАТА" /c:"РЕКЛАМА", простите если неправильно поясняю, "чайник" одним словом.

alpap 27-09-2019 16:23 2889859

Цитата:

Цитата DUNAEV78
а если chcp 1251 »

в данном случае не прокатит, findstr cmd-шный будет искать по своему и только код (ну именно такой его вариант) сохраненный в кодировке 866 будет работать правильно, если играться с кодировками в cmd, то нужной вам компактности опять не получите.
Поставьте вместо штатного блокнота нормальный текстовый редактор (AkelPad, например) и сохраняйте все коды в 866й кодировке и не будет проблем с кириллицей ни в окне cmd ни при поиске ее в файле.

DJ Mogarych 27-09-2019 20:52 2889890

Цитата:

Цитата DUNAEV78
Имя папки где находится сам батник, и лежат эти папки "оплата" и "реклама", меняется постоянно имя »

Да какие проблемы-то:
Код:

gci "$($PSScriptRoot)" -Directory -Exclude Оплата,Реклама |% {Remove-Item "$($_.fullname)" -recurse -force -confirm:$false}

DUNAEV78 30-09-2019 13:29 2890210

Вложений: 1
DJ Mogarych, наверное я что то недопонимаю, можно на примере показать, приложил свой файл

DJ Mogarych 30-09-2019 20:15 2890290

DUNAEV78, это powershell, у него расширение .ps1, всякие @echo off и chcp 866 надо выкинуть.
Запускать правой кнопкой мыши - "выполнить в powershell".


Время: 23:25.

Время: 23:25.
© OSzone.net 2001-