Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление файлов и папок кроме указанных.

Ответить
Настройки темы
CMD/BAT - [решено] Удаление файлов и папок кроме указанных.

Аватара для mrG0bliN

Пользователь


Сообщения: 90
Благодарности: 2

Профиль | Отправить PM | Цитировать


Изменения
Автор: mrG0bliN
Дата: 01-11-2015
Код: Выделить весь код
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

Отправлено: 23:14, 01-11-2015

 

Ветеран


Contributor


Сообщения: 2733
Благодарности: 1698

Профиль | Отправить PM | Цитировать


Как понять 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
	)
)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 02-11-2015 в 16:52.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:59, 02-11-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для mrG0bliN

Пользователь


Сообщения: 90
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Как понять steam\SteamApps\common\"dota 2 beta" ??? »
отличное замечание, но толко я все равно не могу понять когда нужны ковычки а когда нет
вычитал что cmd не видит пути с пробелами и ковычки помогают там где в названии папки "дырки"

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

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

Отправлено: 18:29, 02-11-2015 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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

Цитата mrG0bliN:
как сделать так или добавить его в правило что бы такие файлы тоже удалялись?! »
Перейти на WSH/PoSH. А может вот как раз тут и понадобится «chcp 1251».
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:25, 02-11-2015 | #4


Аватара для mrG0bliN

Пользователь


Сообщения: 90
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

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

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

Отправлено: 19:50, 02-11-2015 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Легко :
Код: Выделить весь код
@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

Последний раз редактировалось Iska, 02-11-2015 в 22:04. Причина: Убрана лишняя точка из предложения.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:19, 02-11-2015 | #6


Аватара для mrG0bliN

Пользователь


Сообщения: 90
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Отправлено: 21:58, 02-11-2015 | #7


Аватара для mrG0bliN

Пользователь


Сообщения: 90
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Iska:
m "Enter your choice:" »
а как получить выбор информации в столбик? в одну строку не оч

Отправлено: 22:34, 03-11-2015 | #8


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата mrG0bliN:
а как получить выбор информации в столбик? в одну строку не оч »
Не пойму Вашего вопроса про столбик. Покажите/нарисуйте хотелку.

Отправлено: 23:40, 03-11-2015 | #9


Аватара для mrG0bliN

Пользователь


Сообщения: 90
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Отправлено: 00:24, 04-11-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление файлов и папок кроме указанных.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удаление файлов кроме сегодняшнего Kenwood Скриптовые языки администрирования Windows 16 10-05-2021 11:43
CMD/BAT - Удаление всех папок кроме 30-ти последних __sa__nya Скриптовые языки администрирования Windows 1 12-04-2013 21:21
CMD/BAT - Удаление всех файлов из папки кроме батника composter Скриптовые языки администрирования Windows 11 30-03-2013 08:25
CMD/BAT - Удаление всех файлов кроме одного в подпапках SELFY Скриптовые языки администрирования Windows 2 29-07-2012 15:34
Регулярное выражение - вырезать все кроме указанных в масиве слов venuko Вебмастеру 14 30-01-2009 09:51




 
Переход