PDA

Показать полную графическую версию : [решено] Удалить все файлы кроме


Страниц : [1] 2

kas1m
19-10-2015, 09:29
Здравствуйте! Нужна помощь в написании скрипта:
Задача: удалить все файлы и каталога и всех подкаталогов, кроме файлов содержащих "bgi" в имени.

for /d %%a in ("C:\1") do if /i not "%%a"=="*bgi*" (del/s/q %%~sa\*.*)

Этот скрипт трёт все файлы.

greg zakharov
19-10-2015, 09:57
Примерно так:for /f %%i in ('dir /s /b ^| findstr /virc:".*bgi.*"') do del /f /q "%%i"

Iska
19-10-2015, 10:42
Примерно так: »
Недостаточно.
кроме файлов содержащих "bgi" в имени. »
…только в имени, а не в любом месте пути.

Georgio
19-10-2015, 11:07
@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
Georgio, Прекрасно работает, спасибо!

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

Georgio
19-10-2015, 12:45
@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
Georgio, Огромное спасибо!

qaaqasqad
13-03-2017, 14:20
Здравствуйте!
Задача: в корне папки удалить все файлы кроме перечисленных.
Подробнее: в корне папки 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
… 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
Iska,
Спасибо! То, что нужно! :good:

megaloman
13-03-2017, 21:06
Если для произвольного числа исключений при удалении, то @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
тогда уж и покороче и побыстрее так (да и возможности маски шире):

@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
alpap, мне нравится эта возможность xcopy, но обычно я стремлюсь не делать новых файлов из опасения попасть на отсвутствие прав на запись. Да и убрать за собой неплохо бы☺. А если этот служебный файл расположить где-то в %tmp%, то потом им в xcopy не воспользуешься. не будут удалены файлы с именем "aa bb" а также все файлы, в имени которых (в том числе и имени папки в пути) содержится aa bb. Поэтому ИМХО, этим надо пользоваться осторожнее.

alpap
14-03-2017, 16:15
Поэтому ИМХО, этим надо пользоваться осторожнее. »
дык это понятно, и это мы еще о файлах без расширения не говорили, кодировки не упоминали и длину имени, кто ж спорит по части осторожности?
тут в данном случае все четко определено и если так же четко подавать (и учесть что не будет таких: ""Ru.pdfEn.pdf""имен файлов, хотя почему и нет), то работать будет, а соломку с собой носить надо :)

Iska
14-03-2017, 16:53
А если этот служебный файл расположить где-то в %tmp%, то потом им в xcopy не воспользуешься. »
Почему?

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

Iska
14-03-2017, 18:48
создается рядом »
Не всегда есть права на создание файлов рядом.

megaloman
14-03-2017, 19:10
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
megaloman,
вот видите как полезно залезть в ... трущобы, и я немного нового узнал и поговорили, а для кого-то в поиске и кладом окажется.

SharkyEXE
03-08-2020, 20:03
Всем здравствуйте

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

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

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

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

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

Итого типа так

@Echo Off

Set Path=C:\1 тест

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

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

Pause

Exit




© OSzone.net 2001-2012