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

mrG0bliN 15-04-2016 10:42 2626381

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

брал шаблон такой:

rem =========================================
@Echo Off

Set Otkuda=Steam

Set NoDelete=%~nx0.NoDelete
@Echo %0 >%NoDelete%

@Echo \*ssfn* >>%NoDelete%
@Echo \*.blob >>%NoDelete%


FOR /F "usebackq delims=" %%f IN (`xcopy "%Otkuda%\*.*" C:\ /L /S /EXCLUDE:%NoDelete%`) DO Del "%%f"

Del %NoDelete%

объясните как записать что бы выделенные файлы жирным не удалялись
мб вместо пушинки нужно что то другое?
Если вписать просто steam.exe то все в порядке с этим файлом, в другом случае не получается

megaloman 15-04-2016 12:19 2626422

Подстановочные знаки в файлах для /EXCLUDE не работают.
Могу предложить свои изменения в Ваш код
Идея изменений: все имена файлов, найденных Dir и соответствующих маске, записываются в файл для /EXCLUDE.
Код:

@Echo off

Set "Otkuda=Steam"
Set "NoDelete=%~nx0.NoDelete"
Set "DPath=%~dp0"

@Echo %0 >%NoDelete%

Set "Mask1=*ssfn*"
Set "Mask2=*.blob"

for /f "usebackq Delims=" %%f in (`dir "%DPath%%Otkuda%\%Mask1%" "%DPath%%Otkuda%\%Mask2%" /b /s /A:-d 2^>nul`) Do Echo %%f>>"%NoDelete%"

FOR /F "usebackq delims=" %%f IN (`xcopy "%DPath%%Otkuda%\*.*" C:\ /L /S /EXCLUDE:%NoDelete%`) DO Del "%%f" 2>nul

Del %NoDelete%


mrG0bliN 15-04-2016 12:27 2626424

Цитата:

Цитата megaloman
for /f "usebackq Delims=" %%f in (`dir "%DPath%%Otkuda%\%Mask1%" "%Otkuda%\%Mask2%" /b /s /A:-d 2^>nul`) Do Echo %%f>>"%NoDelete%"
FOR /F "usebackq delims=" %%f IN (`xcopy "%DPath%%Otkuda%\*.*" C:\ /L /S /EXCLUDE:%NoDelete%`) DO Del "%%f" 2>nul »

а можно расписать по подробнее что бы я понимал что происходит? пожалуйста ^_^

megaloman 15-04-2016 12:45 2626439

что происходит? - это практически полностью Ваш код, попытаюсь его пояснить.
Подпапка Steam, похоже, расположена в одной папке с батником.
В команде Dir под For идёт поиск файлов по Вашим маскам, результат поиска - полные имена файлов- записываются в файл.
Затем в команде Xcopy этот файл с полными именами применяется для работы опции /EXCLUDE
Чтобы при этом генерировались полные имена, к указанной папке Steam дописывается её полный путь, взятый в команде
Set "DPath=%~dp0"
для диска и пути батника.
Для отладки заремьте
rem Del %NoDelete%
и после работы батника текстовым редактором посмотрите этот файл

mrG0bliN 15-04-2016 12:51 2626441

Цитата:

Цитата megaloman
Затем в команде Xcopy этот файл с полными именами применяется для работы опции /EXCLUDE »

там указан диск С , если его заменить на просто \
это как то отразится на работу?
проверяю вроде все удаляется

беда удаляются папки с содержимым, их добавлять в маску?
короч в папке стим есть файлы и папки, файлы удаляются все как нужно, и убиваются файлы в нужных папках а это плохо как быть? :(

alpap 15-04-2016 13:04 2626448

mrG0bliN, Подход неправильный. Просмотрите ваш код так:
Код:

@echo on
set "Otkuda=Steam"
set "NoDelete=NoDelete.txt"
echo %~nx0>"%NoDelete%"
echo ssfn>>"%NoDelete%"
echo .blob>>"%NoDelete%"

for /f "delims=" %%a in ('xcopy /s /exclude:%NoDelete% "%Otkuda%\*.*" "C:\"') do echo del /q "%%~a"
pause

Откуда должны теперь удалиться оставшиеся файлы, из папки Steam? И они нужны как таковые на C:\ или нет, какова точно конечная цель задачи или интересует именно процедура исключения в команде xcopy?

megaloman 15-04-2016 13:07 2626455

Цитата:

там указан диск С , если его заменить на просто \
это как то отразится на работу?
А попробовать слабО? :-)
Я попробовал - никак. Почему? Команда Xcopy с ключом /L не вызывает реального копирования файлов, она выдаёт только список файлов. Поэтому не принципиально, что в папке назначения, лишь бы она существовала. В данном контексте C:\ вообще можно убрать.

Цитата:

Цитата alpap
xcopy /s /exclude:%NoDelete% "%Otkuda%\*.*" "C:\ »

alpap, В заголовке проблемы "Удаление всех файлов кроме указанных". Xcopy с ключом /L не вызывает реального копирования файлов. То, что изобразили Вы, вызовет копирование, ИМХО, оно здесь ненужно. ИМХО, задача стоИт в том, чтобы удалить файлы в папке Steam и её подпапках, за исключением подпадающих под маску.

mrG0bliN 15-04-2016 13:11 2626457

alpap,

я написал батник который работает если находит рядом папку steam, если папки нет то выпадает окно что найдите папку и докиньте батник туда рядышком
от этого все и двигаюсь, сам по себе батник удаляет указанные файлы из папки стим
Цитата:

echo %g4%
Rd /s /q Steam\amf\ 2>nul 1>&2
Rd /s /q Steam\appcache\ 2>nul 1>&2
Rd /s /q Steam\config\htmlcache\ 2>nul 1>&2
Rd /s /q Steam\config\overlayhtmlcache\ 2>nul 1>&2
Rd /s /q Steam\depotcache\ 2>nul 1>&2
Rd /s /q Steam\dumps\ 2>nul 1>&2

что то типо такого

но после таких мелких вычищений в папках стима, нужно сам стим почистить. там много разных файлов но есть определнные которые удалять нельзя, см список выше +папки сердечно важные такие как STEAMAPPS

Цитата:

Цитата megaloman
и её подпапках »

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

megaloman 15-04-2016 13:24 2626467

Цитата:

Цитата mrG0bliN
видимо мой косяк что подал идею не совсем корректно »

Сколько раз зарекался исправлять чужой код без надлежащей постановки! Как задан вопрос, так он и решен ...
Давайте забудем Ваш код и Вы подробно излОжите, что Вам нужно.

mrG0bliN 15-04-2016 13:34 2626473

megaloman,

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

bin\
config\
controller_base\
package\
skins\
STEAMAPPS\
userdata\

+исключить пару файлов

ваш код показал мне как исключать файлы, но на папки не влияет вот в чем суть :(

megaloman 15-04-2016 13:41 2626477

Цитата:

Цитата mrG0bliN
но на папки не влияет вот в чем суть »

На какие папки и как должно влиять? Точно так же как имена файлов имена папок могут быть записаны в файл для исключения. Лучше полным путём. Читайте хелп xcopy /?
Разговор на песенном уровне: Догадайся, мол, сама.
Что мешает записать, например, после
@Echo %0 >%NoDelete%:
Код:

>> %NoDelete% Echo \Steam\bin\
>> %NoDelete% Echo \Steam\config\
>> %NoDelete% Echo \Steam\controller_base\
>> %NoDelete% Echo \Steam\package\
>> %NoDelete% Echo \Steam\skins\
>> %NoDelete% Echo \Steam\STEAMAPPS\
>> %NoDelete% Echo \Steam\userdata\

Цитата:

Цитата Xcopy /?
/EXCLUDE:file1[+file2][+file3]...
Указывает список файлов, содержащих строки. Каждая строка
должна находиться в отдельной линии в файлах. Если одна из
строк совпадает с любой частью абсолютного пути
копируемого
файла, то такой файл копироваться не будет. Например,
указывание таких строк, как \\obj\\ или .obj, исключает
из копирования все файлы в папке obj и, соответственно, все
файлы с расширением .obj.

То есть, никаких подстановочных знаков типа * ? быть не может, но указать можно любой фрагмент абсолютного пути

mrG0bliN 15-04-2016 14:07 2626492

Цитата:

Цитата megaloman
Что мешает записать, например, после
@Echo %0 >%NoDelete%: »

то что нужно было спасибо большое, все заработало вроде бы =)


Время: 23:56.

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