1 (изменено: rayden888, 2014-12-15 16:12:49)

Тема: VBS: Чтение Файла, поиск имени файла и копирование

Доброго дня, коллеги.
Задача такая: берется файл *.txt, в нем построчно написаны символы
пример
454545
454546
3454547

есть сетевая шара \\file\folder\, в которой есть ещё куча папок с файлами.

в каждой папке ещё находятся файлы

3333_454545.doc
4444_454546.doc
5555_454547.doc


Что надо:
брать построчно из текстового последние 6 символов(хотя строчка может и 7 и 8 символов иметь), искать файл в \\file\folder\, в котором имеется часть этого имени, как найдет - копирует в диск C:\copy. и Так с каждой строчкой.

Теперь проблема:

я пишу первый раз на VBS, прошу помощи в написании данного скрипта. я могу считать файл и вывести результат на экран, как дальше сделать так, чтобы он искал по дереву папок, сравнивал и копировал? Ещё момент. Выводит только первую строчку мне на экран.)))

2

Re: VBS: Чтение Файла, поиск имени файла и копирование

в каждой папке

В какой «каждой папке»? Ранее по тексту не было никаких «папок». Была одна папка. Поясните.

3

Re: VBS: Чтение Файла, поиск имени файла и копирование

Простите. Подправил слово файлов на папки с файлами

4

Re: VBS: Чтение Файла, поиск имени файла и копирование

на тестовом варианте написал следующее

 Dim fso, ts, s
 Set fso = CreateObject("Scripting.FileSystemObject")
  Const ForReading = 1
  set ts = fso.OpenTextFile("c:\test\fone.txt", ForReading)
  s = ts.ReadLine
  MsgBox "Содержимое файла = '" & s & "'"
  ts.Close

 

5

Re: VBS: Чтение Файла, поиск имени файла и копирование

rayden888. пакетный файл Вас устроит?

6

Re: VBS: Чтение Файла, поиск имени файла и копирование

да вполне.

7

Re: VBS: Чтение Файла, поиск имени файла и копирование

@echo off
setlocal enableextensions

set "from=\\file\folder"
set "to=C:\copy"
set "list=example.txt"

set x=
for /f "usebackq" %%i in ("%list%") do (
 set x=%%i
 for /f "delims=" %%j in ('"2>nul call dir /a-d/b/s "%from%\*_%%x:~-6%%.doc""') do (
  >nul copy /y "%%j" "%to%"
  )
 )

endlocal
exit /b

8 (изменено: rayden888, 2014-12-15 17:15:34)

Re: VBS: Чтение Файла, поиск имени файла и копирование

Yury, Это батничек? Если да, то не работает он

9 (изменено: Yury, 2014-12-15 17:20:34)

Re: VBS: Чтение Файла, поиск имени файла и копирование

Именно он. Проблемы где-то на Вашей стороне.

10 (изменено: rayden888, 2014-12-15 17:21:58)

Re: VBS: Чтение Файла, поиск имени файла и копирование

точнее работает. но не универсален в плане файла. а вдруг у файла будет больше символов спереди. то он не копирует.

можно как то изменить

"%from%\*_%%x:~-6%%.*"

этот параметр на универсальный перед 6 цифрами?


Или хотя бы объяснить что тут записано, чтобы я сам поиграл)))

11

Re: VBS: Чтение Файла, поиск имени файла и копирование

Все разобрался. Спасибо

12 (изменено: Flasher, 2014-12-20 05:05:42)

Re: VBS: Чтение Файла, поиск имени файла и копирование

rayden888 пишет:

чтобы я сам поиграл

Вот, поиграйте:

Const RCntSym = 6 ' число искомых правых символов
Const LstFile = "C:\Файл.txt"   ' список искомых строк
Const SFolder = "\\file\folder\"
Const TFolder = "C:\copy"

Set SHA  = CreateObject("Shell.Application")
Set Dict = CreateObject("Scripting.Dictionary")
With CreateObject("Scripting.FileSystemObject").OpenTextFile(LstFile,,,-2)
  Do Until .AtEndOfStream
    Str = Trim(.ReadLine)
    If Len(Str) >= RCntSym Then Dict.Add Right(Str, RCntSym), ""
  Loop
End With : FFolder SFolder

Sub FFolder(Folder)
  Set Items = SHA.NameSpace(Folder).Items
  For Each Key in Dict.Keys
    Items.Filter 192, "*" & Key & "*.doc"
    SHA.NameSpace(TFolder).CopyHere Items, 12
  Next : Items.Filter  32, "*"
  For Each Fd In Items : FFolder Fd.Path : Next
End Sub

13

Re: VBS: Чтение Файла, поиск имени файла и копирование

Flasher пишет:

Вот, поиграйте:

Играю. Не работает. Как можно VBS скрипты дебагить?

14

Re: VBS: Чтение Файла, поиск имени файла и копирование

Кое-что исправил.
Пишу без тестов, т.ч. не обессудьте.
Дебагить можно в VbsEdit, например.

15

Re: VBS: Чтение Файла, поиск имени файла и копирование

Дебагить можно в VbsEdit, например.

Можно и без «VbsEdit» .

16

Re: VBS: Чтение Файла, поиск имени файла и копирование

alexii
Имелось в виду - без внутренней отладки (Err.Raise и т.п.). Есть ещё Script Debuger IDE, MS Script Debuger.

17 (изменено: rayden888, 2014-12-17 17:58:44)

Re: VBS: Чтение Файла, поиск имени файла и копирование

протестировано, поигрался. В итоге работает только на локальных дисках. Для подключения по сетевым дискам необходимы ли дополнительные модули? Может авторизацию как то можно добавить ?

18 (изменено: Flasher, 2014-12-19 13:21:00)

Re: VBS: Чтение Файла, поиск имени файла и копирование

rayden888 пишет:

В итоге работает только на локальных дисках.

Окей. А сейчас?

rayden888 пишет:

Для подключения по сетевым дискам необходимы ли дополнительные модули?

Что такое "подключение по дискам"?

19

Re: VBS: Чтение Файла, поиск имени файла и копирование

а можно ускорить как то поиск? или лучше использовать другие скрипты? а то мне 6 файлов ищет полтора часа

20 (изменено: rayden888, 2014-12-19 19:01:48)

Re: VBS: Чтение Файла, поиск имени файла и копирование

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

21

Re: VBS: Чтение Файла, поиск имени файла и копирование

Может тут конвеерезацию можно как то устроить?

22 (изменено: Flasher, 2014-12-20 05:08:34)

Re: VBS: Чтение Файла, поиск имени файла и копирование

rayden888 пишет:

а можно ускорить как то поиск?

Немного ускорил.

rayden888 пишет:

а то мне 6 файлов ищет полтора часа

http://smiles.kolobok.us/mini/chok_mini.gif 6 файлов? Фантастика какая-то. Должны быть сущие долисекунды.

rayden888 пишет:

Или хотя бы тогда запускался в невидимом режиме

Изменил опцию, но не уверен, что это сработает вне локальной системы.

23

Re: VBS: Чтение Файла, поиск имени файла и копирование

а за счет чего ты ускорил? у меня там в районе 20 ТБ файлов от 100 кбайт до 30 мбайт.  или бит

24

Re: VBS: Чтение Файла, поиск имени файла и копирование

В каждой папке проводится поочерёдный поиск всех совпадений. А до этого была полная рекурсия с каждым совпадением. Так тебе помогло?