Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 07.05.2013
Сообщений: 169

Перемещение файлов из одной папки по разным папкам на VBS

17.12.2020, 11:38. Показов 5701. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Нужен скрипт который будет просматривать папку в которой лежат разные файлы:
backup_Trade.10.10.2020.18.35.txt, Trade_Log.10.10.2020.18.35.7z
backup_Zar.10.10.2020.18.35.txt, Zarplata_Log.10.10.2020.18.35.7z
backup_Buh.10.10.2020.18.35.txt, Buh_Log.10.10.2020.18.35.7z
Griboedov.7z,Glav.7z и тд.

И затем раскидывать их по разным папками (Trade_backup,Buh_backup,Zarplata_backup ,Griboedov_backup и тд.). Эти папки уже созданы изначально. Нужно файлы проверять частично, например: Берем файл "backup_Trade_log.10.10.2020.18.35.t xt", смотрим если в названии есть "p_Trade", то переместить файл в папку "Trade_backup" и тд.
Еще нужно чтобы не выдавалась ошибка при отсутствии файлов, так как папка с файлами может быть сегодня пустой, а завтра заполнится.

Вот что у меня есть на данный момент (взял из интернета):

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Explicit
 
Dim objFSO
Dim strMask
 
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
 
With objFSO
    For Each strMask In Array("*Grib*","*p_Trade*","*p_Buh*","*p_Zarplata*" )
         On Error Resume Next
        .MoveFile .BuildPath("D:", strMask), "D:\Griboedov"
         On Error Goto 0
    Next
End With
 
Set objFSO = Nothing
 
WScript.Quit 0
По этому скрипту только файлы отвечающие условию маски (strMask) перемещаются все в одну папку "Griboedov".
Я в этом пока еще слабо разбираюсь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.12.2020, 11:38
Ответы с готовыми решениями:

Перемещение одинаковых файлов по разным папкам
Здравствуйте. помогите пожалуйста с написанием следующего батника. В папке есть множество одинаковых по размеру файлов с разными именами....

Перемещение файлов из одной папки в другую с использованием макроса
Добрый день. Имеется макрос для копирования файлов из одной папки в другую. Стоит задача заменить функцию "копирование" на...

Организовать перемещение файлов из одной папки в другую в определенное время
Всем доброго времени суток. Создал mdb с функционалом который перемещает (копирует, удаляет) файлы из сетевой папки (со всеми...

33
2 / 2 / 0
Регистрация: 07.05.2013
Сообщений: 169
17.12.2020, 18:55  [ТС]
Студворк — интернет-сервис помощи студентам
FlasherX,
Строка 4
Символ 25
Ошибка Индекс выходит за пределы допустимого диапазона '[nunber:1]'

Добавлено через 7 минут
А как перекинуть файлы Griboedov и Glav в папки "D:\Backups_Docs\Griboedov" и "D:\Backups_Docs\Glav"?
Их нельзя кидать в директорию "D:\Backups BD 1C\Backups SQL 1C 8"
Split("Trade| Buh| Zar|plata Griboedov| Glav|") это я так понял названия папок, а где берутся названия файлов?
0
7001 / 2885 / 1110
Регистрация: 06.06.2017
Сообщений: 9,809
17.12.2020, 19:05
Лучший ответ Сообщение было отмечено LastSoldier как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Option Explicit: Dim Arr, oDir1, oDir2, oDir, i, Spl
Arr = Split("Trade| Buh| Zar|plata Griboedov| Glav|")
With CreateObject("Shell.Application")
   Set oDir1 = .NameSpace("D:\Backups BD 1C\Backups SQL 1C 8")
   Set oDir2 = .NameSpace("D:\Backups_Docs")
End With
For i = 0 To UBound(Arr)
   If i < 4 Then If i = 0 Then Set oDir = oDir1 Else If i = 3 Then Set oDir = oDir2
   Spl = Split(Arr(i), "|"): oDir.NewFolder Spl(0) & Spl(1)
   oDir.ParseName(Spl(0) & Spl(1)).GetFolder.MoveHere "D:\test\*" & Spl(0) & "*"
Next
Set oDir = Nothing: Set oDir1 = Nothing: Set oDir2 = Nothing
0
2 / 2 / 0
Регистрация: 07.05.2013
Сообщений: 169
17.12.2020, 19:15  [ТС]
FlasherX,
Строка 10
Символ 23
Ошибка Индекс выходит за пределы допустимого диапазона '[nunber:1]'

Так же ошибка. А что это за диапазон?
0
7001 / 2885 / 1110
Регистрация: 06.06.2017
Сообщений: 9,809
17.12.2020, 19:19
LastSoldier, вы что-то поменяли во второй строке и явно неправильно. Наличие вертикальной черты после/внутри имени обязательно.
0
2 / 2 / 0
Регистрация: 07.05.2013
Сообщений: 169
17.12.2020, 19:25  [ТС]
FlasherX, Нашел ошибку, сейчас все нормально. Я из кода понял что скрипт еще создает папки, как можно это убрать?
Цитата Сообщение от FlasherX Посмотреть сообщение
If i < 4
а что это за ограничение?
0
7001 / 2885 / 1110
Регистрация: 06.06.2017
Сообщений: 9,809
17.12.2020, 19:36
Цитата Сообщение от LastSoldier Посмотреть сообщение
как можно это убрать?
Левую часть в 9 строке начиная с двоеточия. А что есть папки в получателе не окажется?
Цитата Сообщение от LastSoldier Посмотреть сообщение
а что это за ограничение?
Вообще не 4, а 3:
Visual Basic
1
   If i < 3 Then If i = 0 Then Set oDir = oDir1 Else If i = 2 Then Set oDir = oDir2
Начиная с Griboedov во второй строке идут папки для D:\Backups_Docs.
0
2 / 2 / 0
Регистрация: 07.05.2013
Сообщений: 169
17.12.2020, 20:14  [ТС]
FlasherX, Если папка создана, то эта часто кода будет игнорироваться?
Visual Basic
1
oDir.NewFolder Spl(0) & Spl(1)
А нет ли смысла пробегать по циклу два пути "D:\Backups BD 1C\Backups SQL 1C 8"
и "D:\Backups_Docs" вместо

Visual Basic
1
If i < 3 Then If i = 0 Then Set oDir = oDir1 Else If i = 2 Then Set oDir = oDir2
Например:
берем файл "Griboedov.zip", смотрим по первому пути все папки "D:\Backups BD 1C\Backups SQL 1C 8", если не находим такую папку, то переходим ко второму пути "D:\Backups_Docs" и ищем тут, где и находим нужную папку для данного файла.

Это я про то, чтобы не приходилось менять i < 3 и i = 2 при добавлении еще файлов для перемещения.

Или еще что-то типа, если файл по имени не совпадает с Trade Buh Zarplata, то смотреть тут "D:\Backups_Docs", а если совпадает то смотреть тут "D:\Backups BD 1C\Backups SQL 1C 8"
0
7001 / 2885 / 1110
Регистрация: 06.06.2017
Сообщений: 9,809
17.12.2020, 20:32
Цитата Сообщение от LastSoldier Посмотреть сообщение
Если папка создана, то эта часто кода будет игнорироваться?
Не часть, а само создание.
Цитата Сообщение от LastSoldier Посмотреть сообщение
А нет ли смысла пробегать по циклу два пути
Тогда код распухнет на два цикла.
Цитата Сообщение от LastSoldier Посмотреть сообщение
чтобы не приходилось менять i < 3 и i = 2 при добавлении еще файлов для перемещения.
Изначально названы ключевые каталоги для первой папки, потом идут все остальные. Логично, что при добавлении доп. папок для Backups_Docs ничего менять не потребуется.
Цитата Сообщение от LastSoldier Посмотреть сообщение
Или еще что-то типа, если файл по имени не совпадает с Trade Buh Zarplata
Так в коде не рассмытривается каждый файл источника, только элементы маски, что куда проще и быстрее.
0
2 / 2 / 0
Регистрация: 07.05.2013
Сообщений: 169
17.12.2020, 20:38  [ТС]
FlasherX, А если добавить третью директорию "D:\Backups OS", код сильно изменится?

Если вместо
If i < 4 Then If i = 0 Then Set oDir = oDir1 Else If i = 3 Then Set oDir = oDir2 указать
If i < 3 Then If i = 0 Then Set oDir = oDir1 Else If i = 2 Then Set oDir = oDir2
то выдается ошибка


А можно у Вас еще спросить не по теме, но так же по коду vbs?
0
7001 / 2885 / 1110
Регистрация: 06.06.2017
Сообщений: 9,809
17.12.2020, 21:10
Цитата Сообщение от LastSoldier Посмотреть сообщение
код сильно изменится?
Да, тут лучше уже разделять:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Option Explicit
Dim ArrX, Arr0, Arr1, Arr2, oShell, oDir, i, c, Spl
ArrX = Array(" BD 1C\Backups SQL 1C 8", "_Docs", " OS")
Arr0 = Split("Trade| Buh| Zar|plata")
Arr1 = Split("Griboedov| Glav|")
Arr2 = Split("OS1| OS2|")
Set oShell = CreateObject("Shell.Application")
For i = 0 To UBound(ArrX)
   Set oDir = oShell.NameSpace("D:\Backups" & ArrX(i))
   Execute "Arr = Arr" & i
   For c = 0 To UBound(Arr)
      Spl = Split(Arr(c), "|"): oDir.NewFolder Spl(0) & Spl(1)
      oDir.ParseName(Spl(0) & Spl(1)).GetFolder.MoveHere "D:\test\*" & Spl(0) & "*"
   Next
Bext
Set oDir = Nothing: Set oShell = Nothing

Не по теме:

Цитата Сообщение от LastSoldier Посмотреть сообщение
А можно у Вас еще спросить не по теме, но так же по коду vbs?
В новой теме, если она ещё не создана, пожалуйста.

0
2 / 2 / 0
Регистрация: 07.05.2013
Сообщений: 169
17.12.2020, 21:40  [ТС]
FlasherX, Все работает хорошо. Спасибо большое за ответы!
0
7001 / 2885 / 1110
Регистрация: 06.06.2017
Сообщений: 9,809
17.12.2020, 21:47
Лучший ответ Сообщение было отмечено LastSoldier как решение

Решение

LastSoldier, на доброе. Правда стоило всё-таки не создавать пустые папки:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Option Explicit
Dim ArrX, Arr0, Arr1, Arr2, oShell, oItems, oDir, i, c, Spl
ArrX = Array(" BD 1C\Backups SQL 1C 8", "_Docs", " OS")
Arr0 = Split("Trade| Buh| Zar|plata")
Arr1 = Split("Griboedov| Glav|")
Arr2 = Split("OS1| OS2|")
Set oShell = CreateObject("Shell.Application")
Set oItems = oShell.NameSpace("D:\test").Items
For i = 0 To UBound(ArrX)
   Set oDir = oShell.NameSpace("D:\Backups" & ArrX(i))
   Execute "Arr = Arr" & i
   For c = 0 To UBound(Arr)
      Spl = Split(Arr(c), "|")
      oItems.Filter 73920, "*" & Spl(0) & "*"
      If oItems.Count Then oDir.NewFolder Spl(0) & Spl(1) :_
      oDir.ParseName(Spl(0) & Spl(1)).GetFolder.MoveHere oItems, 5652
   Next
Bext
Set oDir = Nothing: Set oShell = Nothing
0
2 / 2 / 0
Регистрация: 07.05.2013
Сообщений: 169
17.12.2020, 22:38  [ТС]
FlasherX,
Visual Basic
1
2
oItems.Filter 73920, "*" & Spl(0) & "*"
If oItems.Count Then oDir.NewFolder Spl(0) & Spl(1) :_
А для чего эти строчки добавлены?
И что означают вот эти цифры 73920 и 5652?
0
7001 / 2885 / 1110
Регистрация: 06.06.2017
Сообщений: 9,809
17.12.2020, 23:48
LastSoldier, вот именно для того, о чём написал: чтобы не создавались пустые папки, проверяем наличие самих файлов по маске.

Про флаги Filter уже не первый раз спрашивают: 1, 2, 3. Сумма 5652 складывается из флагов 4+16+512+1024+4096 отсюда.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.12.2020, 23:48

Перемещение всех файлов из каждой подпапки одной папки в другую папку и их переименование
Добрый день! Прошу помощи, нужен батник или скрипт, который перемещал бы файлы из C:\folder\date_folder -&gt; C:\all_files . Есть...

Копирование файлов по разным папкам
Доброго времени суток всем! Прошу помочь в решении проблемы. Есть папка в ней файлы, надо сделать так чтобы файлы копировались в папки,...

Вирус скрывает папки и создает кучу файлов VBS с именем папки
По локальной сети распространился вирус, который постоянно скрывает папки, создавая файлы с расширением VBS и именем папки. Периодически...

Консольное приложение: отображение структуры файлов и папок, перемещение по папкам, открытие файлов
Приложение написанное на языке СИ позволяющее в консольном режиме отображать структуру файлов и папок,перемещаться по папкам и открывать на...

Перемещение файлов по папкам
Добрый день товарищи! есть код макроса, которым я пользуюсь для перемещения определенных файлов xlsx по заданным папкам. но его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru