Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Windows 10 (http://forum.oszone.net/forumdisplay.php?f=118)
-   -   [решено] При удалении файлов из DOWNLOAD батником эта папка становиться недоступна (http://forum.oszone.net/showthread.php?t=339415)

nikhop 25-02-2019 15:07 2859869

При удалении файлов из DOWNLOAD батником эта папка становиться недоступна
 
При удалении всех файлов/папок из DOWNLOAD батником папка DOWNLOAD становиться недоступна. Почему?

Браузеры начинают по-умолчанию сохранять в Documents\Download.

Батник:
Код:

@echo off
rd /s /q "%USERPROFILE%\Downloads"


Iska 25-02-2019 15:50 2859884

Цитата:

Цитата nikhop
При удалении всех файлов/папок из DOWNLOAD батником папка DOWNLOAD становиться недоступна. »

Потому, что Вы вместо очистки удаляете сам каталог. Так делать не нужно.

P.S. Вечером поищу готовый код.

nikhop 25-02-2019 15:56 2859886

Спасибо за указание ошибки.
Цитата:

Цитата Iska
удаляете сам каталог »

А если дописать "%USERPROFILE%\Downloads\*.*" как-нибудь? Прокатит?

Anton04 25-02-2019 16:43 2859898

Цитата:

Цитата nikhop
А если дописать "%USERPROFILE%\Downloads\*.*" как-нибудь? Прокатит? »

Нужна другая команда из разряда "del" и прокатит, но в в этом случае удалит только файлы в текущей папке и не удалит ни вложенные каталоги, ни их содержимое.

nikhop 25-02-2019 16:54 2859903

Iska, Anton04, спасибо, порыскал нашёл конкретное готовое решение:

Код:

@echo off
PUSHD %USERPROFILE%\Downloads\
2>Nul RD /S/Q "%USERPROFILE%\Downloads\"
POPD

И второй вариант без удаления конкретно файла
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

rem Укажите местонахождение директории для очистки
set sTargetFolder=%USERPROFILE%\Downloads\

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

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


Vadikan 25-02-2019 18:39 2859936

Windows 10 может очищать эту папку автоматически с заданным интервалом без костылей. См. Параметры - (Поиск)- Контроль памяти.

https://t.me/sterkin_ru/670 | https://vk.com/wall-81672804_5972

yurfed 25-02-2019 19:02 2859941

Vadikan, очень разумное решение.
Это всё здорово, но планировщиков я "ненавижу терпеть".
Не спрашиваем почему, я и сам уже не помню откуда это, но, именно так.
Считать сообщение отступом от темы, в сторону флейма.

nikhop 25-02-2019 19:04 2859942

Vadikan, ну охренеть :closed-to Спасибо! :up

Vadikan 25-02-2019 19:08 2859944

yurfed, фича не требует планировщика. Он нужен только в том случае, если не устраивают интервалы 1, 14, 30, 60 дней.

Но даже в этом случае батник не нужен, ибо папка в сфере cleanmgr http://www.oszone.net/13312/

См. также Удаление временных файлов скриптом по расписанию https://www.outsidethebox.ms/11968/

Iska 26-02-2019 20:56 2860200

nikhop, в общем случае можно использовать подобное (код удалит все файлы, не имеющие атрибутов hydden или system):
Скрытый текст
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=%UserProfile%\Downloads

2>nul pushd "%sSourceFolder%" && (
        for /f "usebackq delims=" %%i in (`2^>nul dir /a:-d-h-s /b "*.*"`) do echo del /f /q "%%~i"
        popd
) || (
        echo Can't find source folder [%sSourceFolder%].
        exit /b 1
)

endlocal
exit /b 0


Для реального удаления убрать echo. Использовать подход с RD (даже в сочетании с pushd "%UserProfile%\Downloads") в данном случае не следует — поскольку так попадёт под раздачу и файл desktop.ini, который отвечает за специконку и отображаемое имя папки в Проводнике.

Но, коль в Windows 10 есть встроенный механизм, описанный выше коллегой Vadikan — лучше пользовать его.

nikhop 27-02-2019 15:51 2860354

Цитата:

Цитата Iska
Для реального удаления убрать echo »

хотелось бы скрытно удалять )

mwz 27-02-2019 17:14 2860384

Цитата:

Цитата nikhop
хотелось бы скрытно удалять »

Это не батник, а VB-скрипт нужен.

Iska 27-02-2019 20:16 2860429

Примерно так (на WSH, не проверялось):
Скрытый текст
Код:

Option Explicit

Dim objFolder
Dim objSubFolder
Dim objFile


Set objFolder = WScript.CreateObject("Shell.Application").NameSpace("shell:Downloads")

If Not objFolder Is Nothing Then
        With WScript.CreateObject("Scripting.FileSystemObject").GetFolder(objFolder.self.Path)
                For Each objSubFolder In .SubFolders
                        'WScript.Echo "[" & objSubFolder.Name & "]"
                        objSubFolder.Delete True
                Next
               
                For Each objFile In .Files
                        If Not StrComp(objFile.Name, "desktop.ini", vbTextCompare) = 0 Then
                                'WScript.Echo objFile.Name
                                objFile.Delete True
                        End If
                Next
        End With
       
        Set objFolder = Nothing
Else
        WScript.Echo "Can't access into user [Downloads] folder."
        WScript.Quit 1
End If

WScript.Quit 0


И, тем не менее, повторюсь:
Цитата:

Цитата Iska
…коль в Windows 10 есть встроенный механизм, описанный выше коллегой Vadikan — лучше пользовать его. »



Время: 23:18.

Время: 23:18.
© OSzone.net 2001-