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

mrG0bliN 01-11-2015 23:14 2570567

Удаление файлов и папок кроме указанных.
 
Код:

rem очистка всего кроме папок
rem ==================================================================

 setlocal enableextensions enabledelayedexpansion

chcp 1251 >nul
        set a=чистим 
        set c=Нажмите кнопку: Удалить Y \ Пропустить N
chcp 866 >NUL
echo %a%
echo %c%

rem Укажите местонахождение директории для очистки
set sTargetFolder=steam\SteamApps\common\"dota 2 beta"

rem Поддиректория (или файл), которая НЕ должна удаляться
set sExcludeFilesOrFolders="_CommonRedist" "EmptySteamDepot" "game"

for /f "tokens=*" %%i in ('dir "%sTargetFolder%" /b /a:-d') do (
        set /a bDelete = 1
       
        for %%j in (%sExcludeFilesOrFolders%) do (
                if /i "%%i" equ "%%~j" set /a bDelete = 0
        )
       
        if !bDelete! equ 1 del /f /q "%sTargetFolder%\%%i"
)

for /f "tokens=*" %%i in ('dir "%sTargetFolder%" /b /a:d') do (
        set /a bDelete = 1
       
        for %%j in (%sExcludeFilesOrFolders%) do (
                if /i "%%i" equ "%%~j" set /a bDelete = 0
        )
       
        if !bDelete! equ 1 rd /s /q "%sTargetFolder%\%%i"
)
pause
endlocal
exit /b 0

при запуске пишет что" файл не найден" и мусор не удаляется
над что бы в конечной папке удалилось ВСЕ кроме указанных папок
где че я делаю не так?
не должно быть привязки к диску, вроде как я всегда делаю, кладу батник рядом с папкой, он все находит и делает

файлы разные картинки левые папки dmpm и файлы с кириллицей

брал основу тут: http://forum.oszone.net/thread-217825.html

видел фишку, типо дать "только чтение" папкам, потом удалить папку, удалится все кроме залоченных. Но это не вариант так как там нужные файлы >10gb

megaloman 02-11-2015 15:59 2570768

Как понять steam\SteamApps\common\"dota 2 beta" ???

Я не искал ошибку в Вашем коде. У меня получилось нечто такое (в меру моего понимания возможного имени папки которую обрабатываем):
Цитата:

кладу батник рядом с папкой
которую надо чистить и запускаю батник
Код:

@Echo Off

SetLocal EnableExtensions EnableDelayedExpansion

set "sTargetFolder=Где чистим\Подпапка"
set sExcludeFilesOrFolders="_CommonRedist" "EmptySteamDepot" "game" "Нужный файл 1" "Нужный файл 2.txt"


FOR /F "usebackq delims=" %%i IN (`dir "%sTargetFolder%\" /b /A:D 2^>nul`) DO (
        Set /A Log=0
        FOR %%j IN (%sExcludeFilesOrFolders%) DO If "%%i"==%%j Set /A Log=1
        If !Log!==0 Rd /s /q "%sTargetFolder%\%%i"
)

FOR /F "usebackq delims=" %%i IN (`dir "%sTargetFolder%\" /b /A:-D 2^>nul`) DO (
        Set /A Log=0
        FOR %%j IN (%sExcludeFilesOrFolders%) DO If "%%i"==%%j Set /A Log=1
        If !Log!==0 Del "%sTargetFolder%\%%i"
)

Батник написан в 866 кодировке (Dos). Идея та же что и у Вас

Чуть короче, но , скорее всего, медленнее в работе
Код:

@Echo Off

SetLocal EnableExtensions EnableDelayedExpansion

set "sTargetFolder=Где чистим\Подпапка"
set sExcludeFilesOrFolders="_CommonRedist" "EmptySteamDepot" "game" "Нужный файл 1" "Нужный файл 2.txt"


FOR /F "usebackq delims=" %%i IN (`dir "%sTargetFolder%\" /b 2^>nul`) DO (
        Set /A Log=0
        FOR %%j IN (%sExcludeFilesOrFolders%) DO If "%%i"==%%j Set /A Log=1
        If !Log!==0 (
                Rd /s /q "%sTargetFolder%\%%i" 2>nul || Del /q "%sTargetFolder%\%%i" 2>nul
        )
)


mrG0bliN 02-11-2015 18:29 2570802

Цитата:

Цитата megaloman
Как понять steam\SteamApps\common\"dota 2 beta" ??? »

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

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

пример: vcredist_x86 — копия.exe
как сделать так или добавить его в правило что бы такие файлы тоже удалялись?!

Iska 02-11-2015 19:25 2570810

Цитата:

Цитата mrG0bliN
но толко я все равно не могу понять когда нужны ковычки а когда нет »

Нужны, когда в пути есть/могут быть пробельные символы (это не только сам пробел, но и другие). Лучше всего использовать всегда. Только лучше обрамлять весь путь целиком.

Цитата:

Цитата mrG0bliN
как сделать так или добавить его в правило что бы такие файлы тоже удалялись?! »

Перейти на WSH/PoSH. А может вот как раз тут и понадобится «chcp 1251».

mrG0bliN 02-11-2015 19:50 2570826

Цитата:

Цитата Iska
А может вот как раз тут и понадобится «chcp 1251». »

супер просто супер все удалилось ))

впринципе для роботоспособности сойдет, а ништяки такие можно ли как нить реализовать?
что бы вначале было 3 пункта на выбор, например:
1.вариант а
2. вариант б
3. выход

и по нажатию цифр на клаве выбирался метод

Iska 02-11-2015 20:19 2570838

Легко :):
Код:

@echo off

echo 1. вариант а
echo 2. вариант б
echo 3. выход
echo.
choice.exe /c 123 /m "Enter your choice:"
call :Choice%ErrorLevel%
exit /b 0

rem Variant A
:Choice1
echo Variant A
exit /b 0

rem Variant B
:Choice2
echo Variant B
exit /b 0

rem Exit
:Choice3
exit /b 0

rem Ctrl-C
:Choice0
rem Error
:Choice255

rem Nothing to do
exit /b 0


mrG0bliN 02-11-2015 21:58 2570863

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

mrG0bliN 03-11-2015 22:34 2571290

Цитата:

Цитата Iska
m "Enter your choice:" »

а как получить выбор информации в столбик? в одну строку не оч :(

Iska 03-11-2015 23:40 2571325

Цитата:

Цитата mrG0bliN
а как получить выбор информации в столбик? в одну строку не оч »

Не пойму Вашего вопроса про столбик. Покажите/нарисуйте хотелку.

mrG0bliN 04-11-2015 00:24 2571343

Цитата:

Цитата Iska
Покажите/нарисуйте хотелку. »


Iska 04-11-2015 01:10 2571352

mrG0bliN, так я и привёл выше пример именно в столбик. Чем он Вам не понравился?

mrG0bliN 04-11-2015 01:18 2571354

Цитата:

Цитата Iska
Чем он Вам не понравился? »

тут дело в другом, мы не понимаем друг друга )))

при запуске батника перед пользвателем идет выбор:
  • тыкай 1
  • тукай 2
  • тыкай 3 - выход

юзер жмет 1н и там все по феншую
если жмет 2 то совсем другое

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

Iska 04-11-2015 02:31 2571364

Цитата:

Цитата mrG0bliN
тут дело в другом, мы не понимаем друг друга ))) »

Точно. Не понимаем.

Вот что выводит тот код у меня:
Скрытый текст

А у Вас?

Цитата:

Цитата mrG0bliN
если жмет 2 то совсем другое »

Какое другое?

mrG0bliN 04-11-2015 11:22 2571426

Цитата:

Цитата Iska
echo 1. вариант а
echo 2. вариант б
echo 3. выход
echo. »

так просто это дело не отображается : (
мб в этом моя проблемка? так кракозябра

Iska 04-11-2015 12:01 2571445

Цитата:

Цитата mrG0bliN
так просто это дело не отображается : ( »

А «не просто» — как отображается?

Цитата:

Цитата mrG0bliN
так кракозябра »

Cохраните пакетный файл в кодировке OEM/866 (AkelPad, Bred2/Bred3, редактор Far Manager'а).

mrG0bliN 04-11-2015 12:08 2571449

Цитата:

Цитата Iska
А «не просто» — как отображается? »

странно но все работает ))) 000
Код:

@Echo Off
@chcp 1251
title Clean_dota2_tools_win10 by Mirajana
@CLS

setlocal enableextensions enabledelayedexpansion

chcp 1251 >nul
        set a= Выбран вариант: 1.Исцеление Steam от болячек
        set b= Выбран вариант: 2. Дополнительные плюшки
        set v= Выбран вариант: 3. выход
        set n=.
                echo Варианты очистки Steam:
                echo 1.Исцеление Steam от болячек
                echo 2. Дополнительные плюшки
                echo 3. Выход
choice.exe /c 123 /m " "
call :Choice%ErrorLevel%
exit /b 0
chcp 866 >NUL
rem Variant 1
:Choice1
@Cls
        echo %a%

rem приветствие

варианты очистки выбираются корректно

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

mrG0bliN 06-11-2015 16:44 2572216

Iska, сделать вывод информации о том сколько файлов было удалено?
или лог результата очистки , это сложно ? если да то тему можно закрывать
если нет то я справлюсь ))

Iska 06-11-2015 17:59 2572234

Цитата:

Цитата mrG0bliN
Iska, сделать вывод информации о том сколько файлов было удалено? »

По Вашему коду? Не ранее, чем «rd /s» будет отображать удалённое.

Переходите на PowerShell, там со всем этим проще.

mrG0bliN 07-11-2015 00:39 2572345

Цитата:

Цитата Iska
Переходите на PowerShell, там со всем этим проще. »

тогда темку можно закрывать и я создам новую в разделе с повершелл
послед вопросик в догонку - ps1 может запускаться как простой рычаг? а сами внутренности (готовый скрипт) скачивается и выполняется при подключении к интернету с заранее прописанного сайта?

Iska 07-11-2015 03:55 2572354

«Послед вопросик» мною не понят.

mrG0bliN 07-11-2015 03:59 2572355

Цитата:

Цитата Iska
«Послед вопросик» мною не понят. »

-_- видимо все очень плохо
полистал посмтрел повер шел слишком сильно для моих мозгов, думаю не осилю


Время: 13:55.

Время: 13:55.
© OSzone.net 2001-