Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Очистка папки обмена с сохранением подкаталогов

Ответить
Настройки темы
VBS/WSH/JS - [решено] Очистка папки обмена с сохранением подкаталогов

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Есть папка обмена
C:\TMP
Содержащая несколько папок отделов с установленными соответствующими разрешениями.
C:\TMP\A
C:\TMP\B
C:\TMP\C
Требуется очищать все файлы в папке C:\TMP и во всех ее подкаталогах, при этом сохраняя сами папки отделов.

Не получается добавить в скрипт исключения удаления самих каталогов.
Подбросьте, пожалуйста, скрипт. Может сталкивался кто с такой задачей.
Спасибо!

Отправлено: 16:34, 22-03-2011

 

Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Del C:\Tmp\*.* /A:R /A /S /Q

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:17, 22-03-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 6
Благодарности: 1

Профиль | Отправить PM | Цитировать


Если на VBS, то можно как-то так:

Код: Выделить весь код
Option Explicit
dim FolderPatch, objFSO, objFolder
dim oneFolder
dim onefile
dim objfile, fileList

FolderPatch="C:\TMP"
set objFSO=CreateObject("Scripting.FileSystemObject")
set objFolder=objFSO.GetFolder(FolderPatch)

Sub GetAllFolders(objFolder) 
       for each oneFolder in objFolder.SubFolders
	    set fileList=onefolder.Files
	    for each onefile in fileList 
                objFile=onefile.delete
            next		   
	    GetAllFolders oneFolder 'используем рекурсию
	next
end sub

set fileList=objFolder.Files
      for each onefile in fileList 
           objFile=onefile.delete
      next		   
GetAllFolders(objFolder)
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:44, 22-03-2011 | #3


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Виноват, не посмотрел тему сообщения, но всё же батник существенно короче.
UpDaTe, Похоже на Ваше решение, но чуть короче за счет применения метода DeleteFile и групповых символов в имени файла
Код: Выделить весь код
Public FSO

AllDir = "P:\TMP"                     ' ---------  Полное имя рабочего каталога (без слэжа \ на конце)
Set FSO = CreateObject("Scripting.FileSystemObject")
AllFolders AllDir

' ---------------------------------------------------------------------------
Sub AllFolders(WDir)
    FSO.DeleteFile WDir + "\*.*", True
    
    Set SubF = FSO.GetFolder(WDir).SubFolders

    For Each Folder In SubF
        AllFolders WDir + "\" + Folder.Name
    Next
End Sub

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 22-03-2011 в 22:08.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:58, 22-03-2011 | #4


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Все эти варианты работают и удаляют все файлы в подкаталогах, но оставляют за собой пустые папки.
То есть проблема в том, что не нужно оставлять ничего кроме самих папок A,B,C.

Отправлено: 09:04, 23-03-2011 | #5


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


а поискать по форуму?
CMD/BAT - [решено] программирование bat на удаление файлов из папки
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:18, 23-03-2011 | #6


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


ru52, примерно так:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sFolder=C:\TMP

echo Clearing [%sFolder%]...
del /f /q "%sFolder%"

for /d %%i in ("%sFolder%\*.*") do (
	echo Clearing [%%i]...
	pushd "%%i" && (rmdir /s /q "%%i" & popd) 2>nul
)

endlocal
exit /b 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:29, 23-03-2011 | #7


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Если надо в папке сохранить подпапки в её корне, и удалить все файлы и папки в них, в моём решении замените подпрограмму на вот эту
Код: Выделить весь код
Sub AllFolders(WDir)
    FSO.DeleteFile WDir + "\*.*", True
    
    Set SubF = FSO.GetFolder(WDir).SubFolders

    For Each Folder In SubF
        FSO.DeleteFile WDir + "\" + Folder.Name + "\*.*", True
        FSO.DeleteFolder WDir + "\" + Folder.Name + "\*.*", True
    Next

End Sub
Но батник всё равно короче и надёжнее:
Код: Выделить весь код
@Echo Off
Set Where=C:\Tmp

FOR /F "usebackq delims=" %%i IN (`Dir %Where%\*.* /B /A:D`) DO Call :CleanDir "%%i" 
Del "%Where%\*.*" /S /A:R /A /Q >nul 1>nul
GoTo :Eof

:CleanDir
Cd /D "%Where%\%~1"
rd "%Where%\%~1" /S /Q

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 23-03-2011 в 17:08.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:07, 23-03-2011 | #8


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо огромное, работает!

Отправлено: 17:40, 23-03-2011 | #9


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Цитата Роман_Волков@vk:
...мне нужно содержание одной папки в корневом каталоге оставлять нетронутым. Подскажите, пожалуйста, как это сделать?
Код: Выделить весь код
@Echo Off

Set "Where=C:\Tmp"
Set "NoErase=Не чистим"

FOR /F "usebackq delims=" %%i IN (`Dir %Where%\*.* /B /A:D`) DO Call :CleanDir "%%i" 

Del "%Where%\*.*" /A:R /A /Q >nul 1>nul 2>nul
GoTo :Eof

:CleanDir

IF /I NOT %1=="%NoErase%" (
   Cd /D "%Where%\%~1"
   rd "%Where%\%~1" /S /Q 1>nul 2>nul
)
Если в имени подпапки, которую не чистим, русские буквы, батник должен быть в 866 кодировке

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 10:41, 17-01-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Очистка папки обмена с сохранением подкаталогов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Очистка папки %temp% у всех пользователей в системе. noxville Скриптовые языки администрирования Windows 16 18-08-2020 06:47
VBS/WSH/JS - [решено] Скрипт очистки папки обмена stolyar Скриптовые языки администрирования Windows 9 15-02-2010 08:44
Очистка папки. zubkoff.s Microsoft Windows NT/2000/2003 4 10-11-2009 05:31
Разное - [решено] Очистка папки $hf_mig$ sergav Microsoft Windows 2000/XP 1 19-01-2008 06:08
Очистка папки темп Forpost Microsoft Windows 2000/XP 8 25-01-2006 16:34




 
Переход