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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Удаление папок средствами Windows

Ответить
Настройки темы
Любой язык - Удаление папок средствами Windows

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


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

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


Помогите новичку плиз.
"Необходимо написать скрипт и запускать его при каждом выходе пользователя из виндоус. Скрипт должен очищать заданную директорию по определенной маске: директория -
C:\Users\"ПОЛЬЗОВАТЕЛЬ"\AppData\Local\1C\1cv8
удаляем только папки с названиями типа - 73c58a87-39c7-4571-b760-5a70505b271f
статично кол-во символов между дефисами, общее кол-во символов в названии и набор символов - любые цифры и буквы без спецсимволов и пробелов."
Вобщем не могу понять как задачу на удаление папок с определённым количеством символов,а остальные файлу и папки,чтоб оставались целыми.

Отправлено: 23:20, 09-07-2017

 

Ветеран


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

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


dreamzed, ? в маске обозначает один любой символ:
Код: Выделить весь код
dir C:\Users\ПОЛЬЗОВАТЕЛЬ\AppData\Local\1C\1cv8\????????-????-????-????-????????????
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:10, 10-07-2017 | #2



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

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


Ветеран


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

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


Тут бы хорошо смотрелось такое:
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=%LocalAppData%\1C\1cv8

set sTemplate=[0-9a-f]
set sTemplate4=%sTemplate%%sTemplate%%sTemplate%%sTemplate%
set sTemplate8=%sTemplate4%%sTemplate4%
set sTemplate12=%sTemplate4%%sTemplate4%%sTemplate4%

if exist "%sSourceFolder%\." (
	pushd "%sSourceFolder%" && (
		for /f "usebackq delims=" %%i in (`2^>nul dir /b /a:d "????????-????-????-????-????????????" ^| findstr.exe /r /i /x /c:"%sTemplate8%-%sTemplate4%-%sTemplate4%-%sTemplate4%-%sTemplate12%"`) do echo rd /s /q "%%~i"
		popd
	)
) else (
	echo Can't find source folder [%sSourceFolder%].
	exit /b 1
)

endlocal
exit /b 0

но, к сожалению, как не крути — шаблон получается на шесть символов длиннее, нежели допустимо для findstr.exe. И это под новыми ОС! Для XP и ниже в плане ограничений всё ещё хуже.

Посему, либо с некоторым низким риском удаления лишнего:
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=%LocalAppData%\1C\1cv8

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

endlocal
exit /b 0

(для реального удаления убрать выделенное echo), либо WSH/PoSH, где нет таких ограничений.

Цитата dreamzed:
любые цифры и буквы без спецсимволов и пробелов." »
Судя по внешнему виду — никак не «любые буквы».
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:06, 10-07-2017 | #3


Ветеран


Contributor


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

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


В CMD есть риск непредсказуемого поведения команды с маской.
Вот vbs-скрипт, где задача решена средствами WSH
Код: Выделить весь код
Set WShell = CreateObject("WScript.Shell")
WhereDir = WShell.ExpandEnvironmentStrings("%LocalAppData%") + "\1C\1cv8"

Set FSO = CreateObject("Scripting.FileSystemObject")
If Not FSO.FolderExists(WhereDir) Then
    MsgBox "Нет папки" + vbCrLf + vbCrLf + WhereDir
Else
    On Error Resume Next
    LL = FSO.DeleteFolder(WhereDir + "\????????-????-????-????-????????????", True)
    On Error GoTo 0
End If
Здесь под ? тоже понимается любой символ. Можно, конечно, задействовать регулярные выражения, но это получится более громоздко. СтОит ли игра свеч?

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


Последний раз редактировалось megaloman, 10-07-2017 в 14:15.

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

Отправлено: 14:00, 10-07-2017 | #4

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


Цитата Iska:
Судя по внешнему виду — никак не «любые буквы». »
dreamzed, ...а буквенные представления 16-ричных значений, т.е. шесть букв: от A до F.

-------
Mikhail Zhilin

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

Отправлено: 15:18, 10-07-2017 | #5


Ветеран


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

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


Цитата megaloman:
В CMD есть риск непредсказуемого поведения команды с маской. »
Почему?
в CMD маски ведут себя эталонно - их там придумали, если в VBS поведение отличается - это как раз вызывает недоумение.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:11, 10-07-2017 | #6


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


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

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


#4
у меня сейчас тестовая папка находится по такому пути- D:\1c\1c8
подскажите пожалуйста,что поменять в вашем коде.чтобы он заработал.
Ещё раз прошу прощение за нубизм, первый раз в жизни со скриптами столкнулся)

Отправлено: 20:01, 10-07-2017 | #7


Ветеран


Contributor


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

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


Цитата Iska:
Тут бы хорошо смотрелось .... но, к сожалению ...»
Цитата Бармалей:
Нормальные герои всегда идут в обход
Вот CMD с регулярным выражением.

Код: Выделить весь код
@Echo Off
Set "BoxIn=%LocalAppData%\1C\1cv8"

for /f "usebackq delims=" %%i in (`2^>nul dir /b /a:d "%BoxIn%\????????-????-????-????-?????????????"`) Do Call :DelDir "%%i"
GoTo :Eof

:DelDir
	Set "DirName=%~1"
	If "%DirName:~35,1%"=="" GoTo :Eof

	Set "Delim=%DirName:~8,1%%DirName:~13,1%%DirName:~18,1%%DirName:~23,1%%DirName:~36,1%
	If Not "%Delim%"=="----" GoTo :Eof

	Set "Symb=%DirName:~0,8%%DirName:~9,4%%DirName:~14,4%%DirName:~19,4%%DirName:~24,12%
	Echo %Symb%| Findstr.exe /R /I "[^0-9a-z]" >nul|| RD /S /Q "%BoxIn%\%~1"
GoTo :Eof

rem           1         2         3
rem 012345678901234567890123456789012345
rem 73c58a87-39c7-4571-b760-5a70505b271f
rem 12345678 1234 1234 1234 123456789012

Цитата dreamzed:
у меня сейчас тестовая папка находится по такому пути- D:\1c\1c8 »
Напишите Set "BoxIn=D:\1c\1c8"
В vbs-скрипте WhereDir = "D:\1C\1cv8"

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


Последний раз редактировалось megaloman, 10-07-2017 в 20:50.

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

Отправлено: 20:35, 10-07-2017 | #8


Ветеран


Contributor


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

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


Busla,
Цитата Busla:
в CMD маски ведут себя эталонно - их там придумали »
ИМХО, это опасное заблуждение, возможно справедливое для файлов с именами формата 8.3. Например (совершенно случайно наткнулся), команда:
dir /B /A:D "????????-????-????-????-????????????"
Выдаст (естественно, при наличии папок)
73c58a87-39c7-4571-b760-3a70505b271
73c58a87-39c7-4571-b760-5a70505b271f
73c58a87-39c7-4571-b760-5

Спрогнозировать иные выверты работы команд CMD с маской не берусь, сталкивался с ними не раз, для меня это непредсказуемо, хотя когда-то на форуме объяснение звучало
А вот CMD с рег выражением отработал и пока обмануть его не получилось.
Кстати, в моём vbs-скрипте с этой маской тоже кривая история, так что надо его переписывать, алгоритм только придумать.

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


Последний раз редактировалось megaloman, 11-07-2017 в 08:26.

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

Отправлено: 20:50, 10-07-2017 | #9


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


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

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


Cпасибо Вам Огромное!Да прибудет с Вами высокие зарплаты и крепкое здоровье!

Последний раз редактировалось dreamzed, 10-07-2017 в 22:23.


Отправлено: 20:51, 10-07-2017 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Удаление папок средствами Windows

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Установка - Удаление папок с установочного диска Windows 7 Pavel_01 Microsoft Windows 7 1 26-01-2015 17:08
Разное - Удаление ненужных (пустых) папок в Windows 7 Макс Фолдер Microsoft Windows 7 2 29-06-2013 18:25
Установка - [решено] Удаление папок Windows.old Doggy Microsoft Windows 8 и 8.1 3 06-03-2012 18:54
Разное - как запланировать удаление файла средствами Windows jam2551 Microsoft Windows 2000/XP 4 01-10-2010 04:09
Доступ - [решено] Можно ли проследить средствами Windows удаление файлов EvgeniyQQQ Microsoft Windows 2000/XP 8 09-08-2007 14:46




 
Переход