Vbs удалить файлы по маске
Facebook Если у вас не работает этот способ авторизации, сконвертируйте свой аккаунт по ссылке ВКонтакте Google RAMBLER&Co ID
Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal
Давненько не постил исходников. Вот.. :)
Если кто знает штатную команду MS Windows для такой операции - напишите :)
Такие посты вообще никому не нужны? :)
- Музыка: Nightwish - Sacrament Of Wilderness (live)
иногда бывает полезно запустить del /?
можно узнать много нового
к примеру:
/S Delete specified files from all subdirectories.
Пример использования:
del d:\temp\*.bak /S
только хотел набрать del /?, как уже оказывается за меня сделали ))) ещё некоторые пишут программу для склейки файлов, увидев второго такого человека, пришлось всё-таки запустить copy /? для проверки возникшей теории =)
Копирование одного или нескольких файлов в другое место.
COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/A | /B] источник [/A | /B]
[+ источник [/A | /B] [+ . ]] [результат [/A | /B]]
источник Имена одного или нескольких копируемых файлов.
/A Файл является текстовым файлом ASCII.
/B Файл является двоичным файлом.
/D Указывает на возможность создания зашифрованного файла
результат Каталог и/или имя для конечных файлов.
/V Проверка правильности копирования файлов.
/N Использование, если возможно, коротких имен при копировании
файлов, чьи имена не удовлетворяют стандарту 8.3.
/Y Подавление запроса подтверждения на перезапись существующего
конечного файла.
/-Y Обязательный запрос подтверждения на перезапись существующего
конечного файла.
/Z Копирование сетевых файлов с возобновлением.
Ключ /Y можно установить через переменную среды COPYCMD.
Ключ /-Y командной строки переопределяет такую установку.
По умолчанию требуется подтверждение, если только команда COPY
не выполняется в пакетном файле.
Чтобы объединить файлы, укажите один конечный и несколько исходных файлов,
используя подстановочные знаки или формат "файл1+файл2+файл3+. ".
А расстроишь ты меня не очень, ибо на написание этой программы у меня ушло 12 минут :)
Я поспорил, что напишу её быстрее, чем за 15 минут и выйграл спор :)
если бы даже такого флажка не было
я бы таки сначала сделал бы вот что:
dir d:\temp\*.bak /s /b > filelist.txt
а дальше скормил бы этот список del
если бы вдруг и это было бы не возможно, сделал бы cmd, который в цикле перебирал подкаталоги и удалял бы по маске
если бы вдруг не вышло и это, написал бы js или vbs скриптик
И вот только когда не вышло бы и это, запустил бы студию и написал бы cpp
Для каждой задачи - свои средства. Любой из вышеописанных (кроме последнего) дал бы более удобный и понятный вариант.
Удаление файлов из папки по маске
Доброго времени суток, нагуглил скрипт который должен удалять файлы из папки по маске но он не.
Удаление папок по маске и по списку
Очень часто бывает необходимо удалять из темпов конкретного пользователя папки "dumps" и папки.
Поиск файлов по маске
Здрасте, у меня проблема с кодом. Он должен искать все файлы по маске xls, xlsx в той папке где.
Переименования файлов по маске с модальным окном
Добрый день, требуется помощь по созданию следующего скрипта Есть папка с файлами, при запуске.
Решение
на JScript будет примерно так: только этот скрипт удалит не попадающие под шаблон каталоги в которых могут оказаться пустые файлы с символом "!" в начале имени
ilfaty, используйте метод Filter объекта FolderItems .
Пример найдёте здесь: Поиск в папке и подсчет файлов.
buggydancer
А если путь сетевой, как его указать?
Добавлено через 14 минут
Все не надо разобрался, спасибо огромное
Интересно, правильно ли я понял, что ТС имел в виду, если речь идёт о папке: если в начале имени папки стоит восклицательный знак, то это означает, что эта папка помечена, поскольку она нужна, и, соответственно, всё её содержимое удалять нельзя независимо от наличия или отсутствия восклицательного знака в начале имён этого содержимого?
Если это так, то такой код пакетного файла с этим должен "разобраться" (логика построения алгоритма не самая простая):
ComSpec, Нет, не правильно понял, должна быть и папки с восклицательным знаком и все подпапки и файлы внутри этой папки. Чтобы пользователи не расслаблялись, ату создают папку, в название этой папки ставят в начале имени восклицательный знак и захламляют её всяким мусором (нужно им это не нужно, без разницы)
Я подумал, лучше конечно сделать так, если внутри папки есть хотя бы один файл или папка с восклицательным знаком то корневую папку не удалять даже если на ней нет знака.
Добавлено через 8 минут
Вот у buggydancer хороший скрипт, отрабатывает как надо, но яваскрипт не запускается на Windows server 2008 (запрещено)
Любому пользователю операционной системы Windows рано или поздно нужно осуществить удаление ненужных файлов Windows, как правило, это разный мусор, который мы загрузили в мимолетном состоянии эйфории. В большинстве случаев задача решается простым выбором с помощью мышки ненужных файлов и нажатие на кнопку "DEL" на клавиатуре…
Однако, немало важно рассмотреть, как данная задача решается программным путём, а именно, с помощью сервера сценариев Windows Script Host и программирования с помощью скриптовых языков. За работу с файловой системой отвечает объект FileSystemObject, а за удаление ненужных файлов Windows отвечает его метод DeleteFile, кроме него, мы ещё рассмотрим метод GetTempName, который позволит генерировать временное имя файла. Давайте рассмотрим синтаксис данных методов.
DeleteFile ( filespec [,force]) – Методу передаются два параметра, один из них является обязательным, а другой нет:
- filespec – строковое значение, определяет полный путь к файлу Windows, который надо удалить, можно использовать подстановочные знаки, например, символ вопроса ("?"), который заменяет любой один символ и звездочку ("*"), которая заменяет любое количество символов.
- force – это необязательный параметр, он принимает логическое значение true (можно удалить файлы с атрибутом только для чтения) и false (данное значение идет по умолчанию, говорит о запрете на удаление файлов с атрибутом только для чтения.)
GetTempName () – Как уже было сказано, метод позволяет генерировать случайное имя файла с расширением tmp. Именно его мы будем использовать для создания временных файлов, что бы потом произвести удаление файлов Windows.
Хорошо, теперь давайте приступим к программированию, как всегда, я сначала приведу программный код на языке vbscript, дам пояснения к программному коду, а уже потом приведу пример программного кода но уже на языке jscript.
'********************************************** ' Объект FileSystemObject методы DeleteFile и GetTempName ' Удаление ненужных файлов Windows ' DeleteFile.vbs '********************************************** Option Explicit dim WshShell, cur_dir, FSO, new_folder, i ' формируем ссылку на объект set WshShell = CreateObject("WScript.Shell") ' путь к текущему каталогу cur_dir = WshShell.CurrentDirectory ' создаем ссылку на экземпляр объекта FileSystemObject set FSO=CreateObject ("Scripting.FileSystemObject") ' в текущей папке создаем новый каталог set new_folder=FSO.CreateFolder("Новый каталог_vbs") ' циклично создаем 9 временных файлов for i=1 to 9 FSO.CreateTextFile(new_folder & "\" & FSO.GetTempName) next WScript.Echo "Проверьте содержимое каталога " & new_folder WScript.Echo "Сейчас произойдет удаление файлов Windows в каталоге " & new_folder ' производим всех файлов FSO.DeleteFile new_folder & "\*.*", true ' удаляем каталог FSO.DeleteFolder new_folder, true WScript.Echo "Процесс удаления завершен"
Обратите внимание, что в этом сценарии на языке vbscript я использовал родную функцию vbscript – CreateObject для создания ссылки на объект, плюс, там, где не нужно обрабатывать возвращаемое значение, я просто прописывал вызов метода. Сам сценарий работает по следующей схеме: сначала происходит создание каталога в текущей папке, далее в нём будет создано девять файлов, у которых будут случайные имена, сгенерированные с помощью метода GetTempName. Далее происходит вывод диалоговых окон, которые информируют пользователя о том, что бы он проверил содержимое текущего каталога и о том, что произойдёт удаление ненужных файлов Windows в созданной папке, а потом будет удалена и сама папка, для удаления каталога мы использовали метод DeleteFolder (более детально, читайте в статье "Объект FileSystemObject метод DeleteFolder"), файловая система Windows.
Хорошо, давайте продолжим программировать, но уже на языке jscript. Программный код выполняет ту же задачу, что и пример выше, разница лишь в том, что тут создаваемая папка будет иметь другое имя.
//********************************************** // Объект FileSystemObject методы DeleteFile и GetTempName // Удаление ненужных файлов Windows // DeleteFile.js //********************************************** var WshShell, cur_dir, FSO, new_folder, i; // формируем ссылку на объект WshShell = WScript.CreateObject("WScript.Shell"); // путь к текущему каталогу cur_dir = WshShell.CurrentDirectory; // создаем ссылку на экземпляр объекта FileSystemObject FSO= WScript.CreateObject ("Scripting.FileSystemObject"); // в текущей папке создаем новый каталог new_folder=FSO.CreateFolder("Новый каталог_js"); // циклично создаем 9 временных файлов for (i=1; i WScript.Echo ("Проверьте содержимое каталога " + new_folder); WScript.Echo ("Сейчас произойдет удаление файлов Windows в каталоге " + new_folder); // производим всех файлов FSO.DeleteFile (new_folder + "\\*.*", true); // удаляем каталог FSO.DeleteFolder (new_folder, true); WScript.Echo ("Процесс удаления завершен");
Как и в предыдущем примере, тут логика работы и суть аналогична – удаление ненужных файлов, только стоит обратить внимание на одну мелкую деталь, в vbscript передача параметров переходит без указания круглых скобок, а для языка jscript всегда нужно для метода указывать круглые скобки, даже если никакие параметры не передаются .
И так, давайте подытожим: в этой статье мы рассмотрели метода DeleteFile и GetTempName объекта FileSystemObject, которые позволяют генерировать случайные имена для файлов, а также удалять ненужные файлы Windows.
Спасибо за внимание. Автор блога Владимир Баталий
Мануал (english, 600 Кб). | Зеркало
MS Scripting 5.6 (700 КБ), включает последнюю версию VBS. Владельцам XP/2000(?) должен быть не нужен. | Зеркало
Немного на wikiпедии.
Предыдущие части: 1
Sub FileExists(file)
If (NOT fso.FileExists(file)) Then
WScript.Echo file, " - не найден."
Call EndScript()
End If
End Sub
Sub EndScript
If (NOT IsNull(fso)) Then Set fso = Nothing End If
If (NOT IsNull(objShell)) Then Set objShell = Nothing End If
WScript.Quit
End Sub
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim file
file = "Имя файла с пробелами.ps1"
Call FileExists(file)
prog = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
args = " -nologo -noninteractive -file "
comd = prog & args & file
Set oRegExp = CreateObject("VBScript.RegExp")
oRegExp.IgnoreCase = True
oRegExp.Pattern = "^имя файла_.*\.zip$"
такое удаляет
del "file name_*.zip"
Добавлено:
имя файла_01.zip
имя файла_02.zip
имя файла_03.zip
имя файла_04.zip
file name_01.zip
file name_02.zip
file name_03.zip
file name_04.zip
удаляет батником, который в кодировке utf-8 без BOM
можно ли через VBS создать REG_SZ в реестре
с именем \\BE1-DC-02.be1.corp.local\client64\common\1cestart.exe
и значением WIN7RTM
нужно тоже самое что делает это:
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "\\BE1-DC-02.be1.corp.local\client64\common\1cestart.exe" /t REG_SZ /d WIN7RTM /f
пытался накорябать, но не могу создать имя с \\ vbs их не воспринимает, пытался экранировать двойными кавычками но не получается, прошу помощи
Set wshShell = CreateObject( "WScript.Shell" )
sPath = ""\\BE1""
reg_root = "HKCU"
reg_key = "\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\"
reg_param = sPath
reg_value ="WIN7RTM"
П.С.
А понял, нужно, что бы имя параметра содержало обратный слеш.
Такое впечатление, что никак.
Если нужен именно VBS, могу предложить попробовать обходной манёвр - использовать в пути прямые слеши вместо обратных (может прокатить, а может и нет, надо пробовать)
Set objReg = GetObject("winmgmts:!\\.\root\default:StdRegProv")
reg_key = "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"
reg_param = "\\BE1-DC-02.be1.corp.local\client64\common\1cestart.exe"
reg_value = "WIN7RTM"
спасибо
работает, но если есть ключ Layers
изначально его нет, пока не был сделан хоть один режим совместимости
Set objReg = GetObject("winmgmts:!\\.\root\default:StdRegProv")
reg_key = "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"
reg_param = "\\BE1-DC-02.be1.corp.local\client64\common\1cestart.exe"
reg_value = "WIN7RTM"
objReg.CreateKey HKEY_CURRENT_USER, reg_key
может кому пригодится:
проблема возникла с 32разрядными клиентами 1с последних версий на win7 и 32 и 64
периодически вываливаются 1с с такой ошибкой
1с даже признал баг, обещал пофиксить в новой платформе, но у нас платформа пиленая менять нельзя
нашли способ запускать ярлык в эмуляции, тогда пашет хорошо
но у нас клиент 1с лежит в сети, политикой делаем на него ярлыки, не ставим каждому новую версию а выкладываем на шару
но когда ярлык на прогу в сети вин не дает сделать эмуляции даже руками, тем не менее если сделать ее через реестр все работает
Можно подсказать, как написать удаление файлов по маскам:
*.doc
*.jpg
*.bmp
во всех текущих поддиректориях (я нахожусь в директории типа C:\672\. )
И в этой директории сидят поддиректории A, B, C, D, E, F и пр.
А кроме того надо удалить файлы *.pmd только в поддиректориях А, B, C.
ну, по-идее, можно попробывать так
iPath = "C:\672\"
iFileName$ =Dir(iPath & "*.doc")
Do While iFileName <> ""
Kill iFileName
iFileName = Dir
Loop
Private Sub Command1_Click()
FoldSub (" C:\672")
End Sub
Private Sub FoldSub(fold)
Dim objFso, objFl, objSf, sF
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFl = objFso.GetFolder(fold)
Set objSf = objFl.SubFolders
For Each sF In objSf
On Error Resume Next
Kill sF.Path & "\*.doc"
Kill sF.Path & "\*.jpg"
Kill sF.Path & "\*.bmp"
If sF.Name = "A" Or sF.Name = "B" Or sF.Name = "C" Then Kill sF.Path & "\*.pmd"
Call FoldSub(sF.Path)
Next
End Sub
Ой, а можно пояснить, что здесь происходит?
Я бы попытался подкорректировать. А то смотрю и ничего не могу сообразить (слабо соображаю в программировании). Для чего, например, создавать "CreateObject"?
Я предполагал запускать программку в текущей папке, она бы считывала путь и удаляла бы во всех поддиректориях указанные расширения, а в избранных подпапках еще и *.pmd)
А номер я хотел было брать с помощью такого кода (форумчане благосклонно подсказали).
Но этот код, как оказалось, работает только в VBA, а VB пишет "Object Required", имея в виду strCurFolder (в чем тут дело? другие правила описания?)
strCurFolder = ActiveDocument.FullName
'MyPath = ActiveDocument.FullName
'MsgBox strCurFolder
arrPath = Split(strCurFolder, "\")
intCurItem = UBound(arrPath)
Do
If IsNumeric(arrPath(intCurItem)) Then
strNumVal = arrPath(intCurItem)
blnResFind = True
End If
intCurItem = intCurItem - 1
Loop While intCurItem >= 0 And blnResFind = False
If blnResFind Then
MsgBox strNumVal
Else
MsgBox "Ничего подходящего не найдено."
End If
А уже по полученному номеру сформировать названия избранных подпапок (ну и не забыть прогнать все подпапки на предмет *.doc, *.jpg и пр.).
+Вопрос. А как потом сделать [COLOR="DarkRed"]ехе-шник[/COLOR], чтобы его прям из искомой директории нажать, и оно бы все удалялось? А то какие-то кнопки, формы. Неужели надо запускать VB, чтобы выполнить, то, что было написано в кодах? :eek:
Читайте также: