Показать полную графическую версию : [решено] Помогите с батником удаления подпапок и их содержимого кроме одной
Есть папка 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. Там можно использовать регулярные выражения.
megaloman
11-06-2013, 18:57
Вот вариант. Реально он ничего не удаляет. Можно запустить и проанализировать, как он работает. Чтобы скрипт реально удалял, надо убрать 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
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
все удаляет только оставляет одну лишнюю папку по пути 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
megaloman, Ваш скрипт не удаляет (rem убрал) вот что пишет. Может подскажете что не так? »
Romul35, да все так, с моим вариантом такие же предупреждения были бы, если бы stderr в нирвану не перенаправлял (2>nul после команд удаления)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.