Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Windows [игнор отключен] [закрыт для гостей] / скрипт - поиск файлов / 24 сообщений из 24, страница 1 из 1
27.04.2007, 12:26:10
    #34492461
wondered
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
Всем привет!
Нужен скрипт, который при логоне юзера, искал бы на локальных дисках файлы с расширением .pst, .ost, .doc и писал в лог имена файлов и пути к ним.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 

Set colFiles = objWMIService.ExecQuery _
    ("Select * from CIM_DataFile Where Extension = 'ost' OR Extension = 'doc' OR Extension = 'pst'")

Set fso = CreateObject("Scripting.FileSystemObject")

set wfile = fso.opentextfile("c:\test.csv", 2 ,true)

For Each objFile in colFiles 

Wfile.writeline(strComputer & " " & objFile.Drive & " " & objFile.Path & " " & objFile.FileName & "." & objFile.Extension & " " & objFile.FileSize)

Next

В результате почему-то ругается на строку 13.
Вопрос: как сделать, чтобы искались все файлы .pst, .ost, .doc на локальный дисках? Подскажите, плиз.
...
Рейтинг: 0 / 0
27.04.2007, 14:05:17
    #34492924
wondered
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
Код: plaintext
1.
2.
Set colFiles = objWMIService.ExecQuery _
    ("Select * from CIM_DataFile Where Drive = 'C:' AND Extension = 'ost' OR Extension = 'pst' OR OR Extension = 'doc'")

Так .ost ищется локально, а остальные расширения на сетевых дисках тоже ищет. Нужно только локально.
Поскажите, как это сделать.
...
Рейтинг: 0 / 0
27.04.2007, 14:57:16
    #34493151
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
Может, поиск через FSO устроит?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
set fso=WScript.CreateObject("Scripting.FileSystemObject")

sub find_files(root_folder)
    for each file in root_folder.files
             ext=right(file.path, len(file.path)-instrrev(file.path,"."))
             if ext = "ost" or ext="doc" or ext="pst" then
             WScript.echo file.path
            end if
    next
  set oSubFolders=root_folder.SubFolders
  for each i in oSubFolders
    set tmp_folder=fso.GetFolder(i)
    find_files tmp_folder
  next
end sub

set fso=WScript.CreateObject("Scripting.FileSystemObject")
set rootFolder=fso.GetFolder("D:\ttt")

find_files rootFolder
...
Рейтинг: 0 / 0
27.04.2007, 16:13:39
    #34493504
wondered
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
Что-то не могу понять, как впихнуть это в мой скрипт. Можете полностью написать? спасибо.
...
Рейтинг: 0 / 0
27.04.2007, 16:18:13
    #34493517
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
все просто.
В той точке где WScript.echo file.path
и надо будет Wfile.writeline

естественно, файл предварительно должен быть открыт
...
Рейтинг: 0 / 0
27.04.2007, 16:35:26
    #34493566
wondered
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
Все-равно не работает. Файл открыт, но не работает скрипт..:(
...
Рейтинг: 0 / 0
27.04.2007, 17:43:44
    #34493756
wondered
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
Не могли бы вы написать скрипт полностью.. У меня что-то ничего не выходит. =(
...
Рейтинг: 0 / 0
27.04.2007, 17:50:28
    #34493777
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
у меня все работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
set fso=WScript.CreateObject("Scripting.FileSystemObject")

set wfile = fso.opentextfile("test.csv", 2 ,true)


sub find_files(root_folder)
    for each file in root_folder.files
             ext=right(file.path, len(file.path)-instrrev(file.path,"."))
             if ext = "ost" or ext="doc" or ext="pst" then
             'WScript.echo file.path
             Wfile.writeline file.path & "," & file.drive
            end if
    next
  set oSubFolders=root_folder.SubFolders
  for each i in oSubFolders
    set tmp_folder=fso.GetFolder(i)
    find_files tmp_folder
  next
end sub

set fso=WScript.CreateObject("Scripting.FileSystemObject")
set rootFolder=fso.GetFolder("D:\ttt")

find_files rootFolder

wfile.close
...
Рейтинг: 0 / 0
28.04.2007, 13:54:35
    #34495466
wondered
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
У меня почему-то
Ошибка: Недопустимый вызов или аргумент процедуры
Строка: 11 Символ: 14

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
set fso=WScript.CreateObject("Scripting.FileSystemObject")

set wfile = fso.opentextfile("c:\test.csv", 2 ,true)


sub find_files(root_folder)
    for each file in root_folder.files
             ext=right(file.path, len(file.path)-instrrev(file.path,"."))
             if ext = "ost" or ext="doc" or ext="pst" then
             'WScript.echo file.path
             Wfile.writeline file.path & "," & file.drive
            end if
    next
  set oSubFolders=root_folder.SubFolders
  for each i in oSubFolders
    set tmp_folder=fso.GetFolder(i)
    find_files tmp_folder
  next
end sub

set fso=WScript.CreateObject("Scripting.FileSystemObject")
set rootFolder=fso.GetFolder("C:\")

find_files rootFolder

wfile.close

Сам файл создается, но лог туда не пишется. =(
...
Рейтинг: 0 / 0
28.04.2007, 14:35:15
    #34495644
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
версию WSH в студию.

а просто

Код: plaintext
1.
2.
3.
wfile = fso.opentextfile("c:\test.csv", 2 ,true)
Wfile.writeline "hello"
wfile.close

отрабатывает?
...
Рейтинг: 0 / 0
28.04.2007, 14:54:52
    #34495732
wondered
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
WSH 5.6

Код: plaintext
1.
2.
3.
4.
set fso=WScript.CreateObject("Scripting.FileSystemObject")

wfile = fso.opentextfile("c:\test.csv", 2 ,true)
Wfile.writeline "hello"
wfile.close

Ошибка: Объект не поддерживает это свойство илии метод: 'wfile'
строка:3
...
Рейтинг: 0 / 0
28.04.2007, 15:23:17
    #34495881
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
блин, я сам зарапортавался: Set забыл написать. Могли бы и поправить, кстати.
Итак, отработает ли это?

Код: plaintext
1.
2.
3.
Set wfile = fso.opentextfile("c:\test.csv", 2 ,true)
Wfile.writeline "hello"
wfile.close
...
Рейтинг: 0 / 0
28.04.2007, 15:32:19
    #34495914
wondered
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
Да, это работает. Но в общем скрипте- нет.. =(
...
Рейтинг: 0 / 0
28.04.2007, 15:56:41
    #34496006
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
странно. вообще там в скрипте case получился разный, но ведь это пофигу для VBS
W file.writeline file.path & "," & file.drive
У меня этот скрипт 1: 1 работает
...
Рейтинг: 0 / 0
28.04.2007, 16:15:47
    #34496056
wondered
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
Если исключить одно расширение
Код: plaintext
if ext = "ost" or ext="pst" then

Все работает. Если добавить третье- ошибка.
мне кажется проблема в операции записи в лог..

В моем скрипте в первом посте была та же проблема. С двумя расширениями работал, с 3-мя уже нет..
...
Рейтинг: 0 / 0
28.04.2007, 16:28:38
    #34496087
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
довольно странно сие. Баг в VBSCript?

может скобки везде понаставить и ему полегчает?

if( (ext = "ost") or (ext="doc") or (ext="pst")) then
...
Рейтинг: 0 / 0
28.04.2007, 16:31:40
    #34496095
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
еще идея. может и глупость. Но что если файл с расширением, которое убрали -находится по какому-то корявому пути и при попытке записать этот путь все и глюкает.
Отрабатывает сейчас независимо от того, какое из расширений убрано?
...
Рейтинг: 0 / 0
28.04.2007, 16:50:15
    #34496152
wondered
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
Точно! Не работает с doc. Начинает писать лог, 6 строчек записывает и ошибка... И ничего поделать нельзя?
...
Рейтинг: 0 / 0
28.04.2007, 17:28:01
    #34496276
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
а посмотрите - что это за doc?
Выполните виндовый поиск, проанализируйте.

Или хороший способ понять, на чес затыкается -откомментируйте WScript.echo file.path
(он идет до записи в файл) и выполните cscript mysearch.vbs > mylog.txt
(mysearch.vbs - подразумевается, что это имя нашего скрипта) и посмотрите mylog.txt, в последней строчке и может быть путь к файлу -причине всех бед.
...
Рейтинг: 0 / 0
29.04.2007, 02:14:37
    #34496728
wondered
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
Затыкается он на поиске в системном каталоге. Пишет разрешение отклонено и код ошибки 800A0046. Не понимаю, что мешает, ведь тестирую под админом..
...
Рейтинг: 0 / 0
30.04.2007, 16:48:58
    #34497641
wondered
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
А как можно добавить обработку ошибки, чтобы скрипт продолжал работать пропуская эти проблемные пути?

Код: plaintext
1.
2.
3.
On error resume next
GetErr ()
If Err.Description="Разрешение отклонено" then
Только куда это подставить не разберусь...
...
Рейтинг: 0 / 0
01.05.2007, 13:00:50
    #34498163
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
On error resume next
можно написать в начале скрипта.
потом можно анализировать значение Err.number и принимать решение
лучше именно по номеру, а не по Description, это профессиональнее :-)
...
Рейтинг: 0 / 0
01.05.2007, 13:04:46
    #34498167
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
geterr я никогда не использовал.

просто после действия, которое может потенциально привести к ошибке -пишем
If Err <> 0 Then
'здесь можно просто обработать
'или в зависимости от значения Err.Number сделать те или иные действия

end if
...
Рейтинг: 0 / 0
03.05.2007, 18:44:13
    #34503305
wondered
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрипт - поиск файлов
Спасибо!
Решилось, когда подставил On error resume next в начало процедуры Sub.

Код: plaintext
1.
2.
3.
4.
5.
6.
sub find_files(root_folder)
on error resume next
    for each file in root_folder.files
             ext=right(file.path, len(file.path)-instrrev(file.path,"."))
             if ext = "xls" or ext = "XLS" then

Теперь ищется все, что находится и виндовым поиском. Только различает регистр расширений...

On Error Resume Next - Указывает, что возникновение ошибки выполнения приводит к передаче управления на инструкцию, непосредственно следующую за инструкцией, при выполнении которой возникла ошибка.
Т.е ошибка не прерывает программу и выполняется следующая строка? Мне важно понять на будущее..
...
Рейтинг: 0 / 0
Форумы / Windows [игнор отключен] [закрыт для гостей] / скрипт - поиск файлов / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]