Как сохранить только два типа файлов?
Здравствуйте, уважаемые форумчане.
...есть диск с множеством папок и подпапок разной глубины с файлами различных расширений, нужно во всем этом хаосе оставить только два типа файлов, но с условием, что они находятся вместе в одной папке. Если условие не выполнено, то необходимо удалить папку с файлами целиком, т.е. в итоге необходимо получить диск без пустых папок, а в папках, которые остались должны быть файлы с двумя расширениями.
Помогите пожалуйста решить этот вопрос через командную строку.
|
DJ Mogarych |
06-11-2019 13:16 2894974 |
Цитата:
Цитата Profile
Если условие не выполнено, то необходимо удалить папку с файлами целиком, »
|
А если во вложенной папке условие выполняется, а в вышестоящей - нет? Если удалить вышестоящую, то вложенная затрётся.
|
Цитата:
Цитата DJ Mogarych
Если удалить вышестоящую, то вложенная затрётся. »
|
если во вложенной условие выполняется- то вышестоящая папка должна остаться, даже если все вышестоящие папки до корня будут пустые
|
DJ Mogarych |
06-11-2019 15:46 2894996 |
Тут, видимо, надо в два этапа.
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}
}
|
Исправленный вариант
Код:
@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
|
DJ Mogarych, не хватает удаления прочих типов файлов в каталоге, где содержатся и .jpg, и .png.
|
DJ Mogarych |
06-11-2019 22:13 2895058 |
Переделал, см. выше.
|
Еще вариант
Код:
@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
|
Спасибо всем большое.
Все получилось)
|
Время: 00:28.
© OSzone.net 2001-