Войти

Показать полную графическую версию : [решено] Удалить всё кроме заданной папки


sg_swin
12-10-2011, 23:17
При загрузке компа батник должен удалить всё из " C:\Temp " кроме папки " IE "
всё это в тихом и невидимом режиме , без подтверждений .
Голова кипит второй день, помогите ....

sg_swin
13-10-2011, 15:43
for /d %%a in (C:\Temp\*) do if /i not "%%a"=="C:\Temp\IE" del/s/q %%~sa\*.* del /q C:\Temp\

но остаются пустые папки ... как их убрать ?

kiripanda
13-10-2011, 17:31
для удаления папок со всем содержимым есть спецкоманда RD

Anonymоus
13-10-2011, 17:44
Вот так. В первый проход удалятся файлы, лежащие в корне целевой директории, во второй - ее поддиректории.

@Echo Off
:: Укажите местонахождение директории для очистки
Set Target=C:\Temp
:: Поддиректория (или файл), которая НЕ должна удаляться
Set NoDelete=IE

For /F "tokens=*" %%F In ('Dir %Target% /A:-D /B') Do (
If /I Not "%%F"=="%NoDelete%" (Del /F /Q "%Target%\%%F")
)
For /F "tokens=*" %%D In ('Dir %Target% /A:D /B') Do (
If /I Not "%%D"=="%NoDelete%" (RD /S /Q "%Target%\%%D")
)

sg_swin
19-10-2011, 14:26
Огромное спасибо

vilos
27-12-2011, 23:54
В первый проход удалятся файлы, лежащие в корне целевой директории, во второй - ее поддиректории. »
А как прописать, если нужно оставить не одну папку в директории, а две или три?

Iska
28-12-2011, 08:24
Например, можно попробовать так:
@echo off
setlocal enableextensions enabledelayedexpansion

rem Укажите местонахождение директории для очистки
set sTargetFolder=E:\Песочница\0102

rem Поддиректория (или файл), которая НЕ должна удаляться
set sExcludeFilesOrFolders="a" "bb" "cc cc"

for /f "tokens=*" %%i in ('dir "%sTargetFolder%" /b /a:-d') do (
set /a bDelete = 1

for %%j in (%sExcludeFilesOrFolders%) do (
if /i "%%i" equ "%%~j" set /a bDelete = 0
)

if !bDelete! equ 1 del /f /q "%sTargetFolder%\%%i"
)

for /f "tokens=*" %%i in ('dir "%sTargetFolder%" /b /a:d') do (
set /a bDelete = 1

for %%j in (%sExcludeFilesOrFolders%) do (
if /i "%%i" equ "%%~j" set /a bDelete = 0
)

if !bDelete! equ 1 rd /s /q "%sTargetFolder%\%%i"
)

endlocal
exit /b 0

vilos
28-12-2011, 19:28
Iska, Спасибо большое! То, что надо.

Sisin
14-03-2017, 13:36
Господа, подскажите, пожалуйста, как сделать разрыв строки в этом месте:

set sExcludeFilesOrFolders="a" "bb" "cc cc" "dd dd" "vv vv" "hh hh" "kk kk" "oo oo" "pp pp" "uu uu" "rr rr" "ee ee"

чтобы "vv vv" "hh hh" "kk kk" "oo oo" были на следующей строке, "pp pp" "uu uu" "rr rr" "ee ee" на третьей...

Так не работает:
set sExcludeFilesOrFolders="a" "bb" "cc cc" "dd dd" ^
"vv vv" "hh hh" "kk kk" "oo oo"^
"pp pp" "uu uu" "rr rr" "ee ee"

alpap
14-03-2017, 14:22
@echo off
set ^"sExcludeFilesOrFolders=^
"a"^
"bb"^
"cc cc"^
"dd dd"^
"vv vv"^
"gg gg"^"
echo%sExcludeFilesOrFolders%
:: или
echo %sExcludeFilesOrFolders:~1%
pause

Sisin
14-03-2017, 14:47
Нет, мне надо длинную строчку разделить на 3 строки, чтобы было удобно читать!!!

PS: Уточнил вопрос.

alpap
14-03-2017, 16:20
Нет, мне надо длинную строчку разделить на 3 строки »
Ну ты посмотри, капризные мы какие:

@echo off
set ^"sExcludeFilesOrFolders=^
"a" "bb" "cc cc"^
"dd dd" "vv vv"^
"gg gg"^"
echo%sExcludeFilesOrFolders%
:: или
echo %sExcludeFilesOrFolders:~1%
pause


или же я не понимаю чего надобно-то ...

да, и больше топор не дам

Sisin
14-03-2017, 16:26
Ну ты посмотри, капризные мы какие: »

До этого я сам додумался, но так не срабытывает почему-то...
первая строка "a" "bb" "cc cc"^ обрабатывается, а далее ошибка...

Iska
14-03-2017, 16:54
Sisin, покажите Ваш код.

Sisin
14-03-2017, 17:04
@echo off
setlocal enableextensions enabledelayedexpansion
rem Укажите местонахождение директории для очистки
set sTargetFolder=C:\Новая папка
rem Поддиректория (или файл), которая НЕ должна удаляться
set "^sExcludeFilesOrFolders=^
"1" "2" "3" "4"^
"1.txt" "2.txt" "3.txt" "4.txt"^
"1.png" "2.png" "3.png" "4.png"^"
echo%sExcludeFilesOrFolders%

for /f "tokens=*" %%i in ('dir "%sTargetFolder%" /b /a:-d') do (
set /a bDelete = 1

for %%j in (%sExcludeFilesOrFolders%) do (
if /i "%%i" equ "%%~j" set /a bDelete = 0
)

if !bDelete! equ 1 del /f /q "%sTargetFolder%\%%i"
)

for /f "tokens=*" %%i in ('dir "%sTargetFolder%" /b /a:d') do (
set /a bDelete = 1

for %%j in (%sExcludeFilesOrFolders%) do (
if /i "%%i" equ "%%~j" set /a bDelete = 0
)

if !bDelete! equ 1 rd /s /q "%sTargetFolder%\%%i"
)

endlocal
exit /b 0

alpap
14-03-2017, 17:46
Sisin,
вот эту часть скопипастите, у вас пробелы есть в конце строк (при использовании нормального редактора это видно сразу):
и проверьте отдельно для начала, может отсюда вставляются, тогда надо убрать везде, особенно после крышек.

@echo off
setlocal enableextensions enabledelayedexpansion
rem Укажите местонахождение директории для очистки
set sTargetFolder=C:\Новая папка
rem Поддиректория (или файл), которая НЕ должна удаляться
set ^"sExcludeFilesOrFolders=^
"1" "2" "3" "4"^
"1.txt" "2.txt" "3.txt" "4.txt"^
"1.png" "2.png" "3.png" "4.png"^"
echo %sExcludeFilesOrFolders:~1%
pause


проверил, именно у вас пробелы, отсюда правильно копируется.
и не забудьте ошибку исправить, если не будете копировать
set "^ »
в моем куске исправлена

set sTargetFolder=C:\Новая папка »
кстати тоже не рисковал бы
set "sTargetFolder=C:\Новая папка" - кавычки есть не просят, а пробел аукнется.

ArtMaster7
25-06-2018, 11:31
Iska, Спасибо большое!

maslonax
30-06-2021, 10:17
@Echo Off
:: Укажите местонахождение директории для очистки
Set Target=C:\Temp
:: Поддиректория (или файл), которая НЕ должна удаляться
Set NoDelete=IE
For /F "tokens=*" %%F In ('Dir %Target% /A:-D /B') Do (
If /I Not "%%F"=="%NoDelete%" (Del /F /Q "%Target%\%%F")
)
For /F "tokens=*" %%D In ('Dir %Target% /A:D /B') Do (
If /I Not "%%D"=="%NoDelete%" (RD /S /Q "%Target%\%%D")
) »

не силен в скриптах, от слова совсем, поэтому прошу помощи, нужно чтобы удалялись файлы и папки старше 10 дней кроме указаной

alpap
30-06-2021, 19:19
@echo off
set "d=C:\Papka"
:: Кроме файлов:
set "f1=aaa.txt"
set "f2=bbb.txt"
:: Кромк папок:
set "d1=dirA"
set "d2=dirB"
:: Период (дней)
set dt=10

:: Файлы
for /f "delims=" %%a in ('forfiles /p "%d%" /s /d -%dt% /c "cmd /c if @isdir==FALSE echo @path"^|findstr /v /c:"%f1%" /c:"%f2%"') do >nul 2>&1 del /q "%%~a"
:: Папки
for /f "delims=" %%a in ('forfiles /p "%d%" /s /d -%dt% /c "cmd /c if @isdir==TRUE echo @path"^|findstr /v /c:"%d1%" /c:"%d2%"') do >nul 2>&1 rd /s /q "%%a"
pause& exit




© OSzone.net 2001-2012