1 (изменено: Dr.Hofmann, 2013-02-14 18:45:55)

Тема: VBS: Поиск файлов в каталоге

Добрый день!
Начал писать скрипт который считывает файл и проверяет на соответствие его содержимое + последовательное выполнение условий + проверяет по шаблону - вроде бы получилось. Только не нашел решения в cлучае если в каталоге  много файлов с разными расширениями и разными именами - Требуется написать цикл колличество итерации которого  равно Folder.files.count и передавать каждый раз значение аргумента имени файла - например в метод FSO.GetFile("Имя файла") и делать выход в случае если колличество файлов равно 0.
Сталкивался кто-нибудь?
Какие есть варианты?

2

Re: VBS: Поиск файлов в каталоге

Dr.Hofmann, исправьте грамматические ошибки в сообщении и добавьте префикс скриптового языка в заголовок темы.

3

Re: VBS: Поиск файлов в каталоге

Dr.Hofmann, исправьте грамматические ошибки в сообщении и добавьте префикс скриптового языка в заголовок темы.

Принципиальная разница есть? Или ты смысла не понял?

4

Re: VBS: Поиск файлов в каталоге

Да, это принцип такой - писать грамотно. Как будем писать, такое и будет отношение к форуму. И посетители соответствующие.

5 (изменено: Dr.Hofmann, 2013-02-14 19:13:31)

Re: VBS: Поиск файлов в каталоге

Как будем писать, такое и будет отношение к форуму

Принято. Небольшая ремарка: отношение складывается из потребности в информации разных людей и поэтому они обращаются к общественности форума - в случае если о чем то не сказано в книгах/документации - создавая новые темы. Это к тому каким образом мое сообщение связано с существованием форума и его информационными ресурсами в общем. И какая здесь связь?

 И посетители соответствующие.

Соответствующие чему?

6

Re: VBS: Поиск файлов в каталоге

Например, человек заходит на форум и видит, что все пишут грамотно. Он десять раз подумает, прежде чем создать тему "вообшем кагбэ памагите нужен скрипт", то есть будет работать над собой.

7

Re: VBS: Поиск файлов в каталоге

ясно.

8

Re: VBS: Поиск файлов в каталоге

Ну раз ясно, и, если я понял правильно задачу, то как-то так:


set FSO = CreateObject("Scripting.FileSystemObject")
For each file in FSO.GetFolder(".").Files 'вместо точки путь нужного каталога
 MsgBox file
Next
Стремление - залог успеха

9

Re: VBS: Поиск файлов в каталоге


set FSO = CreateObject("Scripting.FileSystemObject")
For each file in FSO.GetFolder(".").Files 'вместо точки путь нужного каталога
 MsgBox file
Next

Спасибо помогло.

Другое - в скрипте использую метод ReadAll далее свойство  objRegExp.Pattern метод Test:

Set File = FSO.GetFile(file)

Set TextStream = File.OpenAsTextStream(1)
Str = TextStream.ReadAll()
'MsgBox Str
TextStream.Close

'проверка соответствия шаблону. Возвращаемое значение - булево (число). 

Set objRegExp = CreateObject("VBScript.RegExp") ' Описание объекта
objRegExp.Pattern = "123"
GetBool = objRegExp.Test(Str) 

Проблема в том что файл представлен в кодировке ASCII/DOS которая не совпадает с кодировкой шаблона. Можно ли прочитать файл в нужной кодировке или какие есть другие варианты?

10

Re: VBS: Поиск файлов в каталоге

…или какие есть другие варианты?

Такие: WSH: пример конвертации текста из кодировки в кодировку

11

Re: VBS: Поиск файлов в каталоге

alexii

Спасибо познавательно!

12

Re: VBS: Поиск файлов в каталоге

Кстати если это архивный файл существуют какие-нибудь методы по определению что это акхивный файл и того что в нем содержится?

13

Re: VBS: Поиск файлов в каталоге

Поясните вопрос, коллега.

14

Re: VBS: Поиск файлов в каталоге

Dr.Hofmann пишет:

Кстати если это архивный файл существуют какие-нибудь методы по определению что это акхивный файл и того что в нем содержится?

OFFTOP: Я определяю нажатием Ctrl+PgDn в Тотале или Фаре

WBR. Roman

15

Re: VBS: Поиск файлов в каталоге

Rom5, этого мало . Затем следует ещё убедиться, что это именно архивный файл, а не исполняемый, или compound-контейнер типа doc/xls/md, или какой-нибудь образ.

16

Re: VBS: Поиск файлов в каталоге

Универсального способа отличить архив от файла скорее всего нет, поскольку форматы архивных файлов различны.
Как варианты решения проблемы:
1. Найти форматы файлов для широко распространённых архиваторов и разбирать что есть внутри самостоятельно.
2. Можно опереться на расширение и первые символы внутри файла, например, *.rar начинаются с символов RAR!, *.zip начинаются с PK или ZIP и уже стандартными средствами архиватора (rar -l имя архива) получить перечень входящих в него файлов или ошибку, что файл не является архивом данного типа.

17 (изменено: Dr.Hofmann, 2013-02-22 12:12:26)

Re: VBS: Поиск файлов в каталоге

Поясняю.
Существует некий файл срасширением .kvt, тип - сжат или архивный.
В досовской кодировке в Тотале отображается так:


`ъ, "e яяRKBяRKB                  trns.arj  @же  `ъB .e  ясRKBК  К  жUщ          ЁRKBfЩHB    O8374213020801.ARJ  ???.  `ъ6 "e eeЩHBeЩHB                  O8374213020801.ARJ  ўМE  `ъb .e efЩHB?  Z  ]w          fЩHBfЩHB    SBF014583742_775020130208_2949000213000012_100.TXT  ??Е?  ?bc6д;?БГaиrQ6???  ыў?(?Q
ЪАи;0?A?C?6?nеaTыЫщ? ўXl6"b1?¤?l;A] PMЮк#iGp?6?х!(w?
    СQЬои?-}wnZ?Ї?їz.mwбК?)Ў?э???X-{
кy?1уД?s? Ї?S?ф·?Т ??шi8сLFАсУs?рД?цПВ,БAГ?Ш~РнZлщ°{?.ъї5??эZЪ? ЭєЗh76C{??оЪ    CЎ`A??tWKїУИмeN?L0kЙР-6l?-NЭ0,ю(яQIК    мh?g%п%АТy??}J1к?lPУз8р??B??МаV?зY#r2й?HgEБ)??ИeXWN;??ИхХx?Эь=RоI????)BЁbP>??;?їГг$i?т}?еHj?Х>wVПK??o?Єф?x№1?їсэЁq?mЄ?О?№и№cў?я?яR S?Pm#гг3ч??и
?Жw7Oу?ўє7зS Вb??Э{ўнivt?Y?ЩА`ъ  `ъ  

Метод
Str = TextStream.ReadAll()
прочитать не может.

Возращает строку

`k,

-

----------------------------

Задача такова -
1. Правильным образом распаковать/разжать файл .kvt
(но если  есть возможность определить что внутри - просто переместить в друю папку  и распаковать его там)
2. Определяем какие файлы в архиве. например если test.txt перемещаем в .\cat1 если test.doc перемещаем .\cat2   
3. удалить временную папку

C 2,3 понятно

Мне интересно было мнение комрадов по 1.

18

Re: VBS: Поиск файлов в каталоге

Используйте Marco Pontello's Home - Software - TrID, разбирая в скрипте вывод этого приложения.

19

Re: VBS: Поиск файлов в каталоге

 разбирая в скрипте вывод этого приложения.

Так делается или как-то по другому кодится:


WScript.CreateObject("Wscript.Shell").Run _
"%comspec% /K chcp 1251 &&trid c:\test\doc\test.arj > outfile.txt"

outfile = "outfile.txt"

Set FSO = CreateObject("Scripting.FileSystemObject")

Set File = FSO.GetFile(outfile)

Set TextStream = File.OpenAsTextStream(1)

Str = TextStream.ReadAll()

TextStream.Close

Set objRegExp = CreateObject("VBScript.RegExp")

objRegExp.Pattern = "ARJ compressed archive"

GetBool = objRegExp.Test(Str) 

if GetBool = true then 

else

end If 

20

Re: VBS: Поиск файлов в каталоге

Можно и так. Можно и через «.Exec()».

В любом случае используйте параметр trid.exe, ограничивающий вывод утилиты только наиболее вероятным вариантом (наименование параметра навскидку не помню, смотрите сами).

21 (изменено: Dr.Hofmann, 2013-02-27 23:20:50)

Re: VBS: Поиск файлов в каталоге

ок. Посмотрим.
+
Поправка: если рассматривать vbs и 7zip
например:


set FSO = CreateObject("Scripting.FileSystemObject")
For each file in FSO.GetFolder(".\cat2").Files
Set File = FSO.GetFile(file)
Set objShell = CreateObject("WScript.Shell")
Set objWshScriptExec = objShell.Exec("7zip.exe e ??????")
Set objStdOut = objWshScriptExec.StdOut

Так будет работать:
Set objWshScriptExec = objShell.Exec("7zip.exe e file")

22

Re: VBS: Поиск файлов в каталоге

up

23

Re: VBS: Поиск файлов в каталоге

Dr.Hofmann, в чём проблема?

24

Re: VBS: Поиск файлов в каталоге

alexii пишет:

Dr.Hofmann, в чём проблема?

Проблема в следующем:
Если пишу строку кода

Set objWshScriptExec = objShell.Exec("7zip.exe e test.zip")

- то все работает.

Мне нужно вместо test.zip  подставить/передать значение переменной File.
пробовал делать так:

Set objWshScriptExec = objShell.Exec("7zip.exe e "+File)

и так

WshShell.run "7z.exe e c:\cat1\"+File+" c:\tmp"

- неполучилось.
Что делаю не так?

25

Re: VBS: Поиск файлов в каталоге

Используйте «&», а не «+».

26

Re: VBS: Поиск файлов в каталоге

alexii пишет:

Используйте «&», а не «+».

хех, пасиб вам работает!

27

Re: VBS: Поиск файлов в каталоге

Снова какая-то ерунда.
Что не так? Где ошибся?


FileName = file.Name

Вариант 1
WshShell.Run("c:\Program Files (x86)\Nero\Nero 2014\Nero Burning ROM\NeroCmd.exe" --write --drivename "e:\" --underrun_prot --media_type media_cd --speed 24 --iso Test --close_session --disable_eject --recursive c:\backup\"&FileName"",1,True)

Вариант2
WshShell.Run """c:\Program Files (x86)\Nero\Nero 2014\Nero Burning ROM\NeroCmd.exe" --write --drivename "e:\" --underrun_prot --media_type media_cd --speed 24 --iso Test --close_session --disable_eject --recursive c:\backup\"&FileName""""

28

Re: VBS: Поиск файлов в каталоге

WshShell.Run """c:\Program Files (x86)\Nero\Nero 2014\Nero Burning ROM\NeroCmd.exe"" --write --drivename ""e:\"" --underrun_prot --media_type media_cd --speed 24 --iso Test --close_session --disable_eject --recursive ""c:\backup\" & FileName & """", 1, True

29

Re: VBS: Поиск файлов в каталоге

alexii пишет:
WshShell.Run """c:\Program Files (x86)\Nero\Nero 2014\Nero Burning ROM\NeroCmd.exe"" --write --drivename ""e:\"" --underrun_prot --media_type media_cd --speed 24 --iso Test --close_session --disable_eject --recursive ""c:\backup\" & FileName & """", 1, True

Спасибо комрад!

но у меня заработало  ""e:\"" e:\ - без кавычек, с твоими поправками.

30

Re: VBS: Поиск файлов в каталоге

но у меня заработало  ""e:\"" e:\ - без кавычек, с твоими поправками.

Если будут пробельные символы в этом пути — кавычки понадобятся.

31

Re: VBS: Поиск файлов в каталоге

Точнее так
""e:\"" на e: - без слэша

32

Re: VBS: Поиск файлов в каталоге

Точнее так

""e:\"" на e: - без слэша

Это означает — «текущий каталог на диске «e:»».