Помогите с батником удаления подпапок и их содержимого кроме одной
Есть папка 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 .Спасибо
|
Переходите на PowerShell. Там можно использовать регулярные выражения.
|
Вот вариант. Реально он ничего не удаляет. Можно запустить и проанализировать, как он работает. Чтобы скрипт реально удалял, надо убрать 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
|
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.
© OSzone.net 2001-