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

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

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

Старожил


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

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


Изменения
Автор: Profile
Дата: 06-11-2019
Здравствуйте, уважаемые форумчане.
...есть диск с множеством папок и подпапок разной глубины с файлами различных расширений, нужно во всем этом хаосе оставить только два типа файлов, но с условием, что они находятся вместе в одной папке. Если условие не выполнено, то необходимо удалить папку с файлами целиком, т.е. в итоге необходимо получить диск без пустых папок, а в папках, которые остались должны быть файлы с двумя расширениями.
Помогите пожалуйста решить этот вопрос через командную строку.

Отправлено: 08:10, 06-11-2019

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Цитата Profile:
Если условие не выполнено, то необходимо удалить папку с файлами целиком, »
А если во вложенной папке условие выполняется, а в вышестоящей - нет? Если удалить вышестоящую, то вложенная затрётся.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 13:16, 06-11-2019 | #2



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

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


Старожил


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

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


Цитата DJ Mogarych:
Если удалить вышестоящую, то вложенная затрётся. »
если во вложенной условие выполняется- то вышестоящая папка должна остаться, даже если все вышестоящие папки до корня будут пустые

Отправлено: 14:05, 06-11-2019 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Тут, видимо, надо в два этапа.

Powershell:
Код: Выделить весь код
# Удаление ненужных файлов
$folders = (dir D:\temp\123 -Recurse -Directory -Force).fullname
$ext = ".jpg",".png"

$folders |% {
$files = dir "$_" -File -Force
if ($files.extension -notcontains "$($ext[0])" -or $files.extension -notcontains "$($ext[1])") {
    foreach ($file in $files.fullname) {del "$file" -force -confirm:$false}
    }
else {del $files.FullName -Exclude "*$($ext[0])","*$($ext[1])" -Force -confirm:$false}
}
# Удаление пустых каталогов
$folders |% {
$files = dir "$_" -File -Recurse -Force
if (!($files)) {del "$_" -force -confirm:$false}
}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 06-11-2019 в 22:13. Причина: v2, спасибо Iska за замеченный недостаток

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

Отправлено: 15:46, 06-11-2019 | #4


Ветеран


Contributor


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

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


Исправленный вариант
Код: Выделить весь код
@Echo Off
	Set "BoxIn=Z:\Box_In"
	Set "Ext1=.xls"
	Set "Ext2=.doc"

	For /F "usebackq delims=" %%d In (`2^>nul Dir "%BoxIn%" /B /S /A:D ^|Sort /R`) Do (
		Call :ExtDel "%Ext1%"  "%Ext2%" "%%d"
	)
	Pushd "%BoxIn%" &&Call :ExtDel "%Ext1%"  "%Ext2%" "%BoxIn%"
	Popd
Exit /B 0

:ExtDel
	FOR /F "usebackq delims=" %%i IN (`2^>nul Dir /B /A:-D "%~3\*.*"`) DO (
		If /I Not "%%~xi"=="%~1" If /I Not "%%~xi"=="%~2" Del /A /F /Q "%~3\%%~i"
	)

	FOR /F "usebackq delims=" %%i IN (`2^>nul Dir /B /A:-D "%~3\*%~1"`) DO (
		If /I "%%~xi"=="%~1" FOR /F "usebackq delims=" %%j IN (`2^>nul Dir /B /A:-D "%~3\*%~2"`) DO (
			If /I "%%~xj"=="%~2" Exit /B 0
		)
	)
	Del /A /F /Q "%~3\*.*"
	2>nul Rd "%~3"
Exit /B 1

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

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

Отправлено: 19:45, 06-11-2019 | #5


Ветеран


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

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


DJ Mogarych, не хватает удаления прочих типов файлов в каталоге, где содержатся и .jpg, и .png.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:14, 06-11-2019 | #6


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Переделал, см. выше.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

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

Отправлено: 22:13, 06-11-2019 | #7


Ветеран


Contributor


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

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


Еще вариант
Код: Выделить весь код
@Echo Off
	Set "BoxIn=Z:\Box_In"
	Set "Ext1=.xls"
	Set "Ext2=.doc"

	For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\" /B /S /A:-D ^|FINDSTR /E /I /V /C:"%Ext1%" /C:"%Ext2%"`) Do Del /A /F /Q "%%f"

	For /F "usebackq delims=" %%d In (`2^>nul Dir "%BoxIn%" /B /S /A:D ^|Sort /R`) Do (
		Call :ExtDel "%Ext1%"  "%Ext2%" "%%d"
	)
	Pushd "%BoxIn%" &&Call :ExtDel "%Ext1%"  "%Ext2%" "%BoxIn%"
	Popd
Exit /B 0

:ExtDel
	FOR /F "usebackq delims=" %%i IN (`2^>nul Dir /B /A:-D "%~3\*%~1"`) DO (
		If /I "%%~xi"=="%~1" FOR /F "usebackq delims=" %%j IN (`2^>nul Dir /B /A:-D "%~3\*%~2"`) DO (
			If /I "%%~xj"=="%~2" Exit /B 0
	))
	Del /A /F /Q "%~3\*.*"
	2>nul Rd "%~3"
Exit /B 1

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


Отправлено: 15:21, 07-11-2019 | #8


Старожил


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

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


Спасибо всем большое.
Все получилось)

Отправлено: 14:13, 10-11-2019 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
8 / 2012 - Sysprep | Windows 8.1 | как сохранить ассациацию файлов? atsasinWTF Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 1 25-08-2014 18:11
Разное - Как назначить программу для открытия файлов одного типа fonarik Microsoft Windows 2000/XP 1 09-10-2010 11:08
[решено] Есть папка с большим количеством jpeg файлов, надо сохранить файлы как .bmp evg64 AutoIt 9 02-10-2009 09:46
[решено] Как сохранить в Radmin 3.0 введённые данные, типа IP, имена хостов.. Kugaenko Защита компьютерных систем 3 30-10-2007 19:59
как изменить права на файлы только определенного типа Guest Microsoft Windows NT/2000/2003 12 23-03-2004 10:09




 
Переход