Войти

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


DUNAEV78
27-09-2019, 12:25
Ребята Здравствуйте! помогите чайнику с таким вопросом, требуется удалить батником из директории где он и лежит, все папки независимо от того пустая она или нет, кроме папок с именем "оплата" и "реклама", буду признателен, заранее спасибо!

DJ Mogarych
27-09-2019, 13:35
Powershell:

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

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

DJ Mogarych
27-09-2019, 13:52
у меня папка меняется каждый раз имя где лежит сам батник »
ничего не понял

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

DUNAEV78
27-09-2019, 14:34
DJ Mogarych, Имя папки где находится сам батник, и лежат эти папки "оплата" и "реклама", меняется постоянно имя, вот поэтому я и обратил внимание по поводу относительных путей!

megaloman
27-09-2019, 14:36
@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
megaloman, работает! правда подкупает строка у пользователя DJ Mogarych, коротко и скромно, но ваш работает

alpap
27-09-2019, 15:18
подкупает строка »
коротко и скромно »
тоже надо в одну строку?

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

alpap
27-09-2019, 15:45
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
alpap, а если chcp 1251, да ну в прочем, работает, только удаляются все папки, а мне требуется удалять все папки кроме /c:"ОПЛАТА" /c:"РЕКЛАМА", простите если неправильно поясняю, "чайник" одним словом.

alpap
27-09-2019, 16:23
а если chcp 1251 »
в данном случае не прокатит, findstr cmd-шный будет искать по своему и только код (ну именно такой его вариант) сохраненный в кодировке 866 будет работать правильно, если играться с кодировками в cmd, то нужной вам компактности опять не получите.
Поставьте вместо штатного блокнота нормальный текстовый редактор (AkelPad, например) и сохраняйте все коды в 866й кодировке и не будет проблем с кириллицей ни в окне cmd ни при поиске ее в файле.

DJ Mogarych
27-09-2019, 20:52
Имя папки где находится сам батник, и лежат эти папки "оплата" и "реклама", меняется постоянно имя »
Да какие проблемы-то:

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

DUNAEV78
30-09-2019, 13:29
DJ Mogarych, наверное я что то недопонимаю, можно на примере показать, приложил свой файл

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




© OSzone.net 2001-2012