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

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

Ответить
Настройки темы
CMD/BAT - Батник на удаление с исключением

Старожил


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

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


Задача очень простая: удалять все файлы в корне диска D:\ и в корне его подпапки D:\Papka, за исключением файлов с расширением "Ярлык".

Вопрос! Как это сделать? PowerShell не возбраняю.

Я использую утилиту Del, но у неё нет возможности исключения (какие файлы не удалять), поэтому мой батник разросся, мне приходится указывать все расширения файлов которые нужно удалять. Это не удобно, особенно если юзеры начнут захламлять папки файлами с новым расширением которое я не указывал - это не удобно, хочется создать батник и забыть (если только он совсем перестанет отрабатывать).

Вот пример моего батника:

chcp 1251
Del D:\*.pptx /q
Del D:\*.xls /q
Del D:\*.docx /q
Del D:\*.xlsx /q
Del D:\*.pdf /q
Del D:\*.png /q
Del D:\*.exe /q
Del D:\*.jpg /q
Del D:\*.doc /q
Del D:\Papka\*.pptx /q
Del D:\Papka\*.xls /q
Del D:\Papka\*.docx /q
Del D:\Papka\*.xlsx /q
Del D:\Papka\*.pdf /q
Del D:\Papka\*.png /q
Del D:\Papka\*.exe /q
Del D:\Papka\*.jpg /q
Del D:\Papka\*.doc /q

-------
В мире так много интересного!!!


Отправлено: 19:18, 11-04-2017

 

Ветеран


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

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


Ну, например:
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

call :DelFilesInFolder "D:\"
call :DelFilesInFolder "D:\Papka"

endlocal
exit /b 0

:DelFilesInFolder
	setlocal enableextensions enabledelayedexpansion
	
	set sSourceFolder=%~1
	
	pushd "%sSourceFolder%" && (
		for /f "usebackq delims=" %%i in (`2^>nul dir /a:-d /b "*.*"`) do if "%%~xi" neq ".lnk" echo del /f /q "%%~i"
		popd
	) || (
		echo Can't find source folder [%sSourceFolder%].
		exit /b 1
	)
	
	endlocal
	exit /b 0

Цитата djuwa4:
chcp 1251 »
Никаких chcp 1251. Просто сохраняйте пакетный файл в кодировке OEM/866.

Последний раз редактировалось Iska, 12-04-2017 в 09:28. Причина: Добавил в код второй позабытый endlocal, хотя это и не критично (endlocal и так делается автоматом при exit /b)

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

Отправлено: 19:51, 11-04-2017 | #2



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

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


Старожил


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

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


Iska! Спасибо вам огромное!!!!

-------
В мире так много интересного!!!


Последний раз редактировалось djuwa4, 12-04-2017 в 10:26.


Отправлено: 09:10, 12-04-2017 | #3


Старожил


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

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


Думаю кому-то понадобится, скину ссылочки в которых описываются команды из батника:
setlocal (enableextensions, enabledelayedexpansion, endlocal) - http://ab57.ru/cmdlist/setlocal.html
call - http://ab57.ru/cmdlist/call.html
exit - http://ab57.ru/cmdlist/exit.html
Функция DelFilesInFolder - http://wm-help.net/lib/b/book/1239221356/168


Остальные буду дописывать в этом комментарии.

-------
В мире так много интересного!!!


Последний раз редактировалось djuwa4, 12-04-2017 в 11:28.


Отправлено: 10:41, 12-04-2017 | #4


Ветеран


Contributor


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

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


Хоть задача и решена, позволю себе добавить свой вариант
Вот вариант, который позволяет сделать несколько исключений, но можно и одно
Код: Выделить весь код
@Echo Off
cls

Set "Exclude="" ".vbs" ".bat""

Call :DelList "%Exclude%" "Z:\*.*"

Call :DelList ".lnk" "Z:\Temp\*.*"

pause
GoTo :Eof

:DelList
	FOR %%i IN (%2) DO Call :DelExclude %1 "%%i" 
GoTo :Eof

:DelExclude
	For %%e in (%~1) Do If /I "%~x2"==%%e GoTo :Eof
	Echo Del %2
GoTo :Eof
Для реальной работы уберите Echo перед Del

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


Отправлено: 15:44, 12-04-2017 | #5


Ветеран


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

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


Цитата djuwa4:
Функция DelFilesInFolder - http://wm-help.net/lib/b/book/1239221356/168 »
Цитата:
После этого полный путь к удаляемому файлу и значение переменной Status печатаются в окне Блокнота с помощью метода SendKeys
Вот будет радости-то при попытке задействовать этот «метод» с кириллическими путями/именами. Создай текстовый файл, пиши в него, затем тупо отдай на откуп системе его открытие по ShellExecute().

Отправлено: 16:02, 12-04-2017 | #6



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Удаление файлов в каталоге и подкаталогах с маской-исключением Fafus Скриптовые языки администрирования Windows 15 17-03-2017 16:58
PowerShell - удаление папок за исключением определнных chek Скриптовые языки администрирования Windows 3 26-05-2016 10:10
CMD/BAT - Нужен батник для удаление temp, чистки системы + лечение KaSpieC 666 Скриптовые языки администрирования Windows 1 10-11-2014 10:51
PowerShell - [решено] удаление пользователя со всех групп за исключением Domain Users ZEvS-master Скриптовые языки администрирования Windows 11 13-10-2014 16:43
CMD/BAT - [решено] Удаление всех разделов в ветке реестра "Interfaces" за исключением одной. intelem Скриптовые языки администрирования Windows 5 18-01-2013 20:29




 
Переход