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

kas1m 19-10-2015 09:29 2565533

Удалить все файлы кроме
 
Здравствуйте! Нужна помощь в написании скрипта:
Задача: удалить все файлы и каталога и всех подкаталогов, кроме файлов содержащих "bgi" в имени.
Код:

for /d %%a in ("C:\1") do if /i not "%%a"=="*bgi*" (del/s/q %%~sa\*.*)
Этот скрипт трёт все файлы.

greg zakharov 19-10-2015 09:57 2565537

Примерно так:
Код:

for /f %%i in ('dir /s /b ^| findstr /virc:".*bgi.*"') do del /f /q "%%i"

Iska 19-10-2015 10:42 2565548

Цитата:

Цитата greg zakharov
Примерно так: »

Недостаточно.
Цитата:

Цитата kas1m
кроме файлов содержащих "bgi" в имени. »

…только в имени, а не в любом месте пути.

Georgio 19-10-2015 11:07 2565559

Код:

@for /f "delims=" %%a in ('2^>nul dir/a-d/b/s "C:\1\"^| findstr/eirvc:"\\[^\\]*bgi[^\\]*"') do @del/a/f "%%a"

kas1m 19-10-2015 11:25 2565569

Georgio, Прекрасно работает, спасибо!

А можно еще как-то папку исключить из удаления? Если в имени папки есть bgi - не удалять из неё ничего?

Georgio 19-10-2015 12:45 2565594

Код:

@for /f "delims=" %%a in ('2^>nul dir/a-d/b/s "C:\1\"^| findstr/eirvc:"\\[^\\]*bgi[^\\]*\\[^\\]*"^| findstr/eirvc:"\\[^\\]*bgi[^\\]*"') do @del/a/f "%%a"

kas1m 19-10-2015 13:07 2565606

Georgio, Огромное спасибо!

qaaqasqad 13-03-2017 14:20 2719002

Здравствуйте!
Задача: в корне папки удалить все файлы кроме перечисленных.
Подробнее: в корне папки LANG нужно оставить только файлы Ru.ini , En.ini , En.pdf , Ru.pdf ; остальные файлы - удалить, невзирая на расширения.
Например, чтобы оставить только файл Ru.ini , пользуюсь таким:
Код:

for /f "tokens=*" %%v in ('dir /b "LANG\*.*"') do if NOT "%%v" == "Ru.ini" del "LANG\%%v"
Нельзя ли это как-то изменить (или предложить новое), чтобы оставить всю упомянутую группу файлов?

Iska 13-03-2017 15:27 2719018

Код:

… if NOT "%%v" == "Ru.ini" if NOT "%%v" == "En.ini" if NOT "%%v" == "En.pdf" if NOT "%%v" == "Ru.pdf" del "LANG\%%v"

qaaqasqad 13-03-2017 16:36 2719037

Iska,
Спасибо! То, что нужно! :good:

megaloman 13-03-2017 21:06 2719112

Если для произвольного числа исключений при удалении, то
Код:

@Echo Off

Set "BoxIn=Z:\Temp"
Set Exclude="Ru.ini" "En.ini" "En.pdf"  "Ru.pdf"

FOR %%f IN ("%BoxIn%\*.*") DO Call :ExDel "%%f"
GoTo :Eof

:ExDel
        FOR %%e IN (%Exclude%) DO If /I "%~nx1"==%%e GoTo :Eof
        Del %1
GoTo :Eof


alpap 14-03-2017 13:38 2719319

тогда уж и покороче и побыстрее так (да и возможности маски шире):
Код:

@echo off
set "d=papka"
:: Ниже в каждом echo, после : пишем имя, часть имени, расширение того что надо оставить
:: В данном примере не будут удалены файлы с именем "aa bb" (любое расширение) и файлы с расширением docx и xlsx (word и excel)
>$ (
 echo:aa bb
 echo:.docx
 echo:.xlsx
)
for /f "delims=" %%a in ('xcopy /sl /exclude:$ "%d%\*"') do del /q "%%~a" $ 2>nul
exit /b


megaloman 14-03-2017 15:38 2719376

alpap, мне нравится эта возможность xcopy, но обычно я стремлюсь не делать новых файлов из опасения попасть на отсвутствие прав на запись. Да и убрать за собой неплохо бы☺. А если этот служебный файл расположить где-то в %tmp%, то потом им в xcopy не воспользуешься.
Цитата:

не будут удалены файлы с именем "aa bb"
а также все файлы, в имени которых (в том числе и имени папки в пути) содержится aa bb. Поэтому ИМХО, этим надо пользоваться осторожнее.

alpap 14-03-2017 16:15 2719394

Цитата:

Цитата megaloman
Поэтому ИМХО, этим надо пользоваться осторожнее. »

дык это понятно, и это мы еще о файлах без расширения не говорили, кодировки не упоминали и длину имени, кто ж спорит по части осторожности?
тут в данном случае все четко определено и если так же четко подавать (и учесть что не будет таких: ""Ru.pdfEn.pdf""имен файлов, хотя почему и нет), то работать будет, а соломку с собой носить надо :)

Iska 14-03-2017 16:53 2719409

Цитата:

Цитата megaloman
А если этот служебный файл расположить где-то в %tmp%, то потом им в xcopy не воспользуешься. »

Почему?

alpap 14-03-2017 17:56 2719436

тем более этот служебный файл никуда и не прячется, создается рядом и оттуда же сразу и удаляется (del /q "%%~a" $)

Iska 14-03-2017 18:48 2719454

Цитата:

Цитата alpap
создается рядом »

Не всегда есть права на создание файлов рядом.

megaloman 14-03-2017 19:10 2719462

Iska,
Не работает
xcopy Z:\temp\*.* /L /EXCLUDE:"Z:\У попа была собака\kuku"
xcopy Z:\temp\*.* /L /EXCLUDE:Z:\У попа была собака\kuku
xcopy Z:\temp\*.* /L /EXCLUDE:"kuku"

Работает
xcopy Z:\temp\*.* /L /EXCLUDE:Z:\Траляля\kuku

Еще другая неприятность с ключом L: xcopy Z:\temp\*.* /L работать не будет, если находиться в папке где файлы (Z:\temp\), выдаст "Невозможно скопировать файл в себя".
ИМХО аккуратнее написать, например
xcopy Z:\temp\*.* "%Tmp%\" /L
то есть в качестве выходной указать другую существующую папку, хотя туда и ничего не попадёт. Кстати, еще странность: если там будет файл с таким же именем, как и в исходной папке, выдаст запрос на перезапись.

Извините, впал в глубокий оффтоп, но конструкция
Код:

@Echo Off

chcp 1251 >nul

FOR /F "usebackq delims=" %%f IN (`xcopy Z:\temp\*.* "%Tmp%\" /L`) DO Echo %%f
FOR /F "usebackq delims=" %%f IN (`Dir Z:\temp\*.* /A:-D /S /B`) DO Echo %%f


pause

при наличии кириллических символов в названии для xcopy не работает, а Dir - пожалуйста! (хотел записать рез работы xcopy в файл для прочтения в notepad)
alpap, а если батник запускается с расшаренного ресурса с запретом на запись?
Вообще, xcopy моя любимая команда, но иногда доводит до истерики :)

alpap 14-03-2017 20:35 2719491

megaloman,
вот видите как полезно залезть в ... трущобы, и я немного нового узнал и поговорили, а для кого-то в поиске и кладом окажется.

SharkyEXE 03-08-2020 20:03 2930074

Всем здравствуйте

Есть папка, типа C:\1 тест\

Внутри этой папки C:\1 тест\ вагон подпапок

Внутри каждой подпапки есть файл 1 Вася Привет.doc

Задача - оставить файл 1 Вася Привет.doc внутри подпапок, остальные файлы всяко-разных расширений удалить

Пожалуйста, научите

Итого типа так
Код:

@Echo Off

Set Path=C:\1 тест

Set Filemane=1 Вася Привет.doc

команда удаления

Pause

Exit


megaloman 03-08-2020 22:03 2930086

Код:

@Echo Off
        Set "BoxIn=Z:\Box_In"
        Set "Exclude=(1) Папа! У Васи! Силён (в математике)!!!.txt"

        FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%" /B /S /A:-D`) DO (
                If /I Not "%Exclude%"=="%%~nxf" Del /F /A "%%f"
        )
Exit /B

Принципиально!!! При наличии кириллицы в тексте кода сохранить его в 866 кодировке!

a1ek9 06-09-2024 19:42 3030691

/del


Время: 06:39.

Время: 06:39.
© OSzone.net 2001-