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

sg_swin 12-10-2011 23:17 1772102

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

sg_swin 13-10-2011 15:43 1772510

Код:

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 1772588

для удаления папок со всем содержимым есть спецкоманда RD

Anonymоus 13-10-2011 17:44 1772595

Вот так. В первый проход удалятся файлы, лежащие в корне целевой директории, во второй - ее поддиректории.
Код:

@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 1776869

Огромное спасибо

vilos 27-12-2011 23:54 1823779

Цитата:

Цитата Anonymоus
В первый проход удалятся файлы, лежащие в корне целевой директории, во второй - ее поддиректории. »

А как прописать, если нужно оставить не одну папку в директории, а две или три?

Iska 28-12-2011 08:24 1823934

Например, можно попробовать так:
Код:

@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 1824308

Iska, Спасибо большое! То, что надо.

Sisin 14-03-2017 13:36 2719315

Господа, подскажите, пожалуйста, как сделать разрыв строки в этом месте:

Код:

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 2719333

Код:

@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 2719345

Нет, мне надо длинную строчку разделить на 3 строки, чтобы было удобно читать!!!

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

alpap 14-03-2017 16:20 2719396

Цитата:

Цитата Sisin
Нет, мне надо длинную строчку разделить на 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 2719400

Цитата:

Цитата alpap
Ну ты посмотри, капризные мы какие: »

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

Iska 14-03-2017 16:54 2719410

Sisin, покажите Ваш код.

Sisin 14-03-2017 17:04 2719419

Код:

@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 2719429

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

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

Цитата Sisin
set "^ »

в моем куске исправлена

Цитата:

Цитата Sisin
set sTargetFolder=C:\Новая папка »

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

ArtMaster7 25-06-2018 11:31 2819398

Iska, Спасибо большое!

maslonax 30-06-2021 10:17 2961174

Цитата:

Цитата Anonymоus
@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 2961215

Код:

@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



Время: 14:59.

Время: 14:59.
© OSzone.net 2001-