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

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

Ответить
Настройки темы
CMD/BAT - [решено] Перемещение (удаление) директорий по маске

Аватара для ven00m

Пользователь


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

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


Mast need скрипт каторый бы перемещал или удалял директории по маске. В моем случае по такой ( ~* ), можно просто принцип хотябы (IMHO длинный батник получится). Заранее спасибо.

Отправлено: 11:57, 19-01-2008

 

Ветеран


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

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


Например, так:
Код: Выделить весь код
@echo off
if exist %temp%\dirs.txt erase %temp%\dirs.txt
for /r %%i in (.) do echo %%i >> %temp%\dirs.txt
for /f %%d in ('findstr /r /c:".*\\~[^\\]*\\\." %temp%\dirs.txt') do rd /s /q %%d
не самое изящное решение - сбрасывает во временный файл список всех подкаталогов, но как-то невнятно findstr с консолью работает
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:31, 19-01-2008 | #2



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

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


Ветеран


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

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


Busla, не могли бы вы указать чайнику, где конкретно в вашем тексте маска удаляемых папок? Я понял, что она в кавычках:

.*\\~[^\\]*\\\.

Это верно?

Отправлено: 03:18, 21-01-2008 | #3

pva pva вне форума

Аватара для pva

Ветеран


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

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


файл: my search template.js
Код: Выделить весь код
// где искать
var dir     = "c:\\windows\\";
// что искать (все папки, которые заканчиваются на 32)
var regex   = new RegExp(".*32", "i");


function deal_with_dir(dir1)
{
    // чё с ними делать
    WScript.Echo('deleted: ' + dir1);
}


// основной цикл
var fileSystem = new ActiveXObject("Scripting.FileSystemObject");

for ( var datas=new Enumerator(fileSystem.GetFolder(dir).SubFolders); !datas.atEnd(); datas.moveNext())
{
    if ( regex.test(datas.item().Name) ) deal_with_dir(datas.item().Name);
}

Отправлено: 08:23, 21-01-2008 | #4


Аватара для ven00m

Пользователь


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

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


Гыыы, как все сложно. Я по проше способ нашел:
текст файла del.vbs
Код: Выделить весь код
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.DeleteFolder "С:\path\~*", 1

Отправлено: 12:53, 21-01-2008 | #5


Ветеран


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

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


2 truvo: да, findstr понимает регулярные выражения:
.* - любой символ любое кол-во раз (начало пути может быть любым, если его необходимо ограничить какой-то подпапкой - это делается в первом for)
\\ - косая черта - зарезервированный символ, поэтому его необходимо указывать дважды
~ - собственно, тильда, с которой должно начинаться имя папки
[^\\]* - любой символ, кроме косой черты произвольное кол-во раз
\\ - уже было
\. - точка - тоже зарезервированный символ, поэтому необходимо "экранировать" знаком "\" (for возвращает имена с точками на конце)

Про регулярные выражения много материалов в инете - вещь полезная, правда, надо немного попрактиковаться - сразу по доке обычно сложно составить правильное выражение.

2 pva: Ну и зачем это было писать?!
Во-первых: оно ищет совсем другие папки! (а не те, что заканчиваются на 32)
Во-вторых: без ряда изменений оно не адаптируется к поставленной задаче
Во-третьих: про WSH не спрашивали - в WinPE, например, он не работает

Последний раз редактировалось Busla, 21-01-2008 в 13:48. Причина: уточнил про папки


Отправлено: 13:45, 21-01-2008 | #6

pva pva вне форума

Аватара для pva

Ветеран


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

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


Busla,
1.
Цитата Busla:
оно ищет совсем другие папки »
я запустил у себя тестовый пример, нашло как раз папки *32
2.
Цитата Busla:
без ряда изменений оно не адаптируется к поставленной задаче »
на мой взгляд задача
Цитата ven00m:
Mast need скрипт каторый бы перемещал или удалял директории по маске. В моем случае по такой ( ~* ), можно просто принцип хотябы (IMHO длинный батник получится). Заранее спасибо. »
вполне выполнена
3.
Цитата Busla:
про WSH не спрашивали »
средство программирования не уточнялось, извините

По-моему последний пример ven00m вполне подходит. кратко и ёмко.

Отправлено: 14:36, 31-01-2008 | #7


Ветеран


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

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


ven00m конечно же виднее, что ему надо... Я ориентировался на первоначальную формулировку - заголовок в категории "CMD/BAT".

Ваш скрипт ищет папки в имени которых встречается 32. А в функцию-обработчик передаёт не полный путь, а только название папки. Поэтому и счёл необходимым предупредить, что в некоторых случаях он может грохнуть совсем не те папки, который задумывались.

Честно говоря, в голову не приходило, что ven00m требуется такая простая вещь - это разжёвано в справке к for:
Код: Выделить весь код
for /d %%d in (~*) do rd /s /q %%d

Отправлено: 17:34, 31-01-2008 | #8


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


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

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


А если надо удалять только директории, например, с названием OldVersions (со всеми файлами в ней содержащимися) из всех подкаталогов текущего каталога(и возможно из подкаталогов каталогов), то это возможно сделать как cmd-скрипт, без применения языков программирования?

Отправлено: 14:20, 15-02-2009 | #9



Moderator


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

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


pretzel, примерно так:
Код: Выделить весь код
For /D /R %%I In (OldVersions*) Do If "%%~nxI"=="OldVersions" RD /S /Q "%%~I"
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:04, 15-02-2009 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Перемещение и удаление файлов по условию и маске VitHAK Скриптовые языки администрирования Windows 14 23-12-2013 08:57
CMD/BAT - Удаление скрытых папок по маске chatlaninsan Скриптовые языки администрирования Windows 5 07-09-2009 17:22
2008 - Не хватает прав на удаление\перемещение контейнера в AD diga Windows Server 2008/2008 R2 2 10-04-2009 14:14
Любой язык - [решено] удаление файлов по маске, созданных за прошлые сутки BRAT2 Скриптовые языки администрирования Windows 1 06-04-2009 08:51
[решено] Автоматическое удаление файлов из директорий BigMac Microsoft Windows NT/2000/2003 19 29-05-2005 22:32




 
Переход