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

Romul35 10-06-2013 19:20 2165465

Помогите с батником удаления подпапок и их содержимого кроме одной
 
Есть папка temp с подпапками вида
temp\ApplicationsProvider.apk\res\values-ru
temp\AudioEffect.apk\res\values-ru
temp\Browser.apk\res\values-ru
В каждой подпапке есть лишние файлы и папки, как при помощи батника их удалить и оставить только папку values-ru с путями и то что в ней находится. Ну или копировать только ее в таком формате copy\*.apk\res\values-ru .Спасибо

Iska 10-06-2013 23:14 2165594

Переходите на PowerShell. Там можно использовать регулярные выражения.

megaloman 11-06-2013 18:57 2166023

Вот вариант. Реально он ничего не удаляет. Можно запустить и проанализировать, как он работает. Чтобы скрипт реально удалял, надо убрать rem и можно удалить (можно и оставить если вывод на экран не напрягает) строки с Echo перед строками с rem.
Код:

@Echo Off
cls

Set Where=temp
Set NoDel=values-ru

SetLocal EnableExtensions EnableDelayedExpansion

FOR /F "usebackq delims=" %%d IN (`Dir "%Where%\" /s /a:D /B 2^>nul`) DO (
        Set TDir=%%d
        Set TDir=!TDir:%NoDel%=!
        If "%%d"=="!TDir!" (
                Echo Del "%%d\*.*" /q 2>nul
rem                Del "%%d\*.*" /q 2>nul
                Set Yes=0
                FOR /F "usebackq delims=" %%i IN (`Dir "%%d" /s /a:D /B 2^>nul`) DO (
                        Set iDir=%%i
                        Set iDir=!iDir:%NoDel%=!
                        If Not "%%i"=="!iDir!" Set Yes=1
                )
                If !Yes!==0 Echo Rd "%%d" /s /q
rem                If !Yes!==0 Rd "%%d" /s /q

        )
)

Удаляем все файлы и директории во всех поддиректориях указанной директории (у вас это temp), но ничего в директории values-ru и ниже не трогаем.

El Sanchez 11-06-2013 21:42 2166118

Romul35, еще вариант до кучи:
Код:

@Echo Off
SetLocal
Set Source=C:\Temp

If Not Exist "%Source%" Exit /B 1
For /F "Tokens=*" %%A In ('Dir /B /S /AD "%Source%" 2^>nul^|Find /i /v "values-ru"') Do (Del /F /Q "%%A\*.*" 2>nul&RD /Q "%%A" 2>nul)
Del /F /Q "%Source%\*.*" 2>nul
RD /Q "%Source%" 2>nul


Romul35 12-06-2013 14:02 2166412

megaloman, Ваш скрипт не удаляет (rem убрал) вот что пишет. Может подскажете что не так?
Код:

Del "D:\TEST\Temp\ActivityNetwork.apk\*.*" /q
Файл не найден
Rd "D:\TEST\Temp\ActivityNetwork.apk" /s /q
Системе не удается найти указанный путь.
Del "D:\TEST\Temp\ActivityNetwork.apk\original\*.*" /q
Файл не найден
Rd "D:\TEST\Temp\ActivityNetwork.apk\original" /s /q
Системе не удается найти указанный путь.
Del "D:\TEST\Temp\ActivityNetwork.apk\res\*.*" /q
Файл не найден
Rd "D:\TEST\Temp\ActivityNetwork.apk\res" /s /q
Системе не удается найти указанный путь.
Del "D:\TEST\Temp\ActivityNetwork.apk\original\META-INF\*.*" /q
Файл не найден
Rd "D:\TEST\Temp\ActivityNetwork.apk\original\META-INF" /s /q
Системе не удается найти указанный путь.

El Sanchez, Спасибо, в вашем варианте все удаляет только оставляет одну лишнюю папку по пути temp\*.apk\original

El Sanchez 12-06-2013 14:19 2166418

Цитата:

Цитата Romul35
все удаляет только оставляет одну лишнюю папку по пути temp\*.apk\original »

Romul35, пардон, сортировку забыл:
Код:

@Echo Off
SetLocal
Set Source=C:\Temp

If Not Exist "%Source%" Exit /B 1
For /F "Tokens=*" %%A In ('Dir /B /S /AD "%Source%" 2^>nul^|Find /i /v "values-ru"^|Sort /R') Do (Del /F /Q "%%A\*.*" 2>nul&RD /Q "%%A" 2>nul)
Del /F /Q "%Source%\*.*" 2>nul
RD /Q "%Source%" 2>nul

Цитата:

Цитата Romul35
megaloman, Ваш скрипт не удаляет (rem убрал) вот что пишет. Может подскажете что не так? »

Romul35, да все так, с моим вариантом такие же предупреждения были бы, если бы stderr в нирвану не перенаправлял (2>nul после команд удаления)


Время: 07:19.

Время: 07:19.
© OSzone.net 2001-