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

ilfaty 02-11-2016 11:13 2683945

Удаление файлов и папок по имени
 
Добрый день, помогите пожалуйста, нужен скрипт который бы удалял в конкретной папке все папки, под папки, файлы кроме тех в название которые в начале стоит знак "!"
Удалять должен все папки без знака, даже если внутри него есть файлы и папки со знаком.
И еще одно условие: возможность добавить пути до папок и файлов исключения

Iska 02-11-2016 11:22 2683951

Цитата:

Цитата ilfaty
Удалять должен все папки без знака, даже если внутри него есть файлы и папки со знаком.
И еще одно условие: возможность добавить пути до папок и файлов исключения »

А в этом случае что приоритетней — исключение где-нибудь глубоко во вложенной папке или наличие ! в родительской?!

ilfaty 02-11-2016 12:05 2683973

пока исключения в родительской папке но в будущем будет и глубоко во вложении
Если глубоко во вложении сделать проблематично, то пускай пока будет исключения в родительской, там надо два файла в исключения засунуть

megaloman 03-11-2016 18:49 2684405

Вот батник (то есть скрипт надо сохранить в файл с расширением .bat в 866 кодировке при наличии в тексте путей к файлам и папкам на русском языке). Из-за исключений получилось громоздко. Исключениями могут быть как файлы, так и папки целиком. Перед обработкой заданной папки исключения переносятся во временную папку, заданная папка обрабатывается, затем в ней восстанавливаются исключения, временная папка удаляется.
Код:

@Echo Off

Set "InDir=Z:\Temp"
Set "Exc="_xcopy.txt" "JS_Host\Дискета от книги" "JS_Host\Из интернета\Листинг 1.htm""

Set "DSave=!%~nx0.tmp"

pushd "%InDir%"
attrib -r -s -h /S /D

Call :TmpRD "%InDir%" "%DSave%" 1

FOR %%E IN (%Exc%) DO Call :Save "%InDir%\%%~E" "%DSave%"

For /F "usebackq delims=" %%D In (`Dir "%InDir%\" /B /S /A:D 2^>nul^|Sort /R`) Do Call :DelDir "%%D"
For /F "usebackq delims=" %%F In (`Dir "%InDir%\" /B /S /A:-D 2^>nul`) Do Call :DelFile "%%F"

Call :Restore "%InDir%" "%DSave%" 

Call :TmpRD "%InDir%" "%DSave%"

GoTo :Eof

:TmpRD
        RD "%~d1\%~2" /S /Q 2>nul
        If "%3"=="1" MD "%~d1\%~2%~pnx1"
GoTo :Eof

:DelDir
        Set "DName=%~nx1"
        If Not "%DName:~0,1%"=="!" Rd %1 /S /Q
GoTo :Eof

:DelFile
        Set "FName=%~nx1"
        If Not "%FName:~0,1%"=="!" Del %1
GoTo :Eof

:Save
        For /F "usebackq delims=" %%f In (`Dir %1 /B /A:-D 2^>nul`) Do (
                If /I %1=="%~dp1%%f" (
                        Md "%~d1\%~2%~p1" 2>nul
                        Move /Y %1 "%~d1\%~2%~p1" >nul 
                        GoTo :Eof
                )
        )

        Md "%~d1\%~2%~pnx1" 2>nul
        Move /Y "%~1\*.*" "%~d1\%~2%~pnx1\" >nul

        For /F "usebackq delims=" %%f In (`Dir %1 /B /S /A:D 2^>nul`) Do (
                Md "%%~df\%~2%%~pnxf" 2>nul
                Move /Y "%%f\*.*" "%%~df\%~2%%~pnxf\" >nul
        )
GoTo :Eof

:Restore
        xcopy "%~d1\%~2%~pnx1\*.*" "%~1\" /E /Y >nul
GoTo :Eof

Здесь для примера:
Z:\Temp - обрабатываемая папка
Исключения:
_xcopy.txt - файл в обрабатываемой папке, то есть Z:\Temp\_xcopy.txt
JS_Host\Дискета от книги - папка, то есть Z:\Temp\JS_Host\Дискета от книги
и т д, уровень вложенности папок и файлов исключений любая
Не исключаю, что после обработки некоторые папки будут пустыми, я их не удалял, если они соответствуют условию поставленной задачи
Cделана доработка с учетом наличия скрытых, системных и только для чтения файлов. Перед обработкой все эти атрибуты сбрасываются. Если это не устраивает, придётся радикально переделывать код.

ilfaty 03-11-2016 19:00 2684409

megaloman, Спасибо огромное, после праздников испробую. Вопросик, я сам в скриптовых языках не шарю, на каком написан этот скрипт, какое расширение писать?

Iska 03-11-2016 19:08 2684411

Цитата:

Цитата ilfaty
на каком написан этот скрипт »

Пакетный файл.

Цитата:

Цитата ilfaty
какое расширение писать? »

«.cmd».

ilfaty 03-11-2016 19:57 2684423

ок, поставил .cmd,
Проблемы:
1. В корне диска создается Временная папка и после обработки эта папка не удаляется

2. Что за ошибки, системные файлы удалить не может?

C:\Users\Yusupov.i>"C:\Users\Yusupov.i\Desktop\Удалить все без знака !.cmd"
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти E:\Share\Docs11\desktop.ini
Не удается найти E:\Share\Docs11\! ИНЖЕНЕР ПО ОТ и ТБ\! РемГрупп\!Инженер по ОТ
и ТБ\~$ормы выд. СИЗ РемГрупп 2015.docx
Не удается найти E:\Share\Docs11\! ИНЖЕНЕР ПО ОТ и ТБ\!Гражданская оборона\Thumb
s.db
Не удается найти E:\Share\Docs11\! ИНЖЕНЕР ПО ОТ и ТБ\!заявка\Thumbs.db
Не удается найти E:\Share\Docs11\! ИНЖЕНЕР ПО ОТ и ТБ\!Инструктаж по ОТ и ТБ\Thu
mbs.db
Не удается найти E:\Share\Docs11\! ИНЖЕНЕР ПО ОТ и ТБ\!П Р Е З Е Н Т А Ц И Я\Thu
mbs.db
Не удается найти E:\Share\Docs11\! ИНЖЕНЕР ПО ОТ и ТБ\!П Р Е З Е Н Т А Ц И Я\!Ал
маз\Thumbs.db
Не удается найти E:\Share\Docs11\! ИНЖЕНЕР ПО ОТ и ТБ\!ПРИБРЕЖНЫЙ-2\Thumbs.db
Не удается найти E:\Share\Docs11\! ИНЖЕНЕР ПО ОТ и ТБ\!ПРИБРЕЖНЫЙ-2\!Паспорта от
ходов ПР2\Thumbs.db
Не удается найти E:\Share\Docs11\! ИНЖЕНЕР ПО ОТ и ТБ\!Фото\Thumbs.db
Не удается найти E:\Share\Docs11\! Новые формы раскрытия информации 731\Thumbs.d
b

ilfaty 03-11-2016 22:05 2684469

Отработал, вроде все нормаль, но не понятные ошибки все равно остались

E:\Share\Docs11>"E:\Скрипты\Удалить все без знака !.cmd"

Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.
Не удается найти указанный файл.

E:\Share\Docs11>

И надо удалять временную папку которая создается в корне диска

ilfaty 03-11-2016 22:08 2684471

Вложений: 1
вот мой батник

ilfaty 04-11-2016 10:49 2684579

Все заработала, зашел под логином Администратор, хотя у моей четки тоже полные права админа.
Спасибо огромное


Время: 04:01.

Время: 04:01.
© OSzone.net 2001-