Показать полную графическую версию : [решено] Удалить всё кроме заданной папки
При загрузке компа батник должен удалить всё из " C:\Temp " кроме папки " IE "
всё это в тихом и невидимом режиме , без подтверждений .
Голова кипит второй день, помогите ....
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")
)
В первый проход удалятся файлы, лежащие в корне целевой директории, во второй - ее поддиректории. »
А как прописать, если нужно оставить не одну папку в директории, а две или три?
Например, можно попробовать так:
@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
Iska, Спасибо большое! То, что надо.
Господа, подскажите, пожалуйста, как сделать разрыв строки в этом месте:
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"
@echo off
set ^"sExcludeFilesOrFolders=^
"a"^
"bb"^
"cc cc"^
"dd dd"^
"vv vv"^
"gg gg"^"
echo%sExcludeFilesOrFolders%
:: или
echo %sExcludeFilesOrFolders:~1%
pause
Нет, мне надо длинную строчку разделить на 3 строки, чтобы было удобно читать!!!
PS: Уточнил вопрос.
Нет, мне надо длинную строчку разделить на 3 строки »
Ну ты посмотри, капризные мы какие:
@echo off
set ^"sExcludeFilesOrFolders=^
"a" "bb" "cc cc"^
"dd dd" "vv vv"^
"gg gg"^"
echo%sExcludeFilesOrFolders%
:: или
echo %sExcludeFilesOrFolders:~1%
pause
или же я не понимаю чего надобно-то ...
да, и больше топор не дам
Ну ты посмотри, капризные мы какие: »
До этого я сам додумался, но так не срабытывает почему-то...
первая строка "a" "bb" "cc cc"^ обрабатывается, а далее ошибка...
@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
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 дней кроме указаной
@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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.