Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript

Модерирует : ShIvADeSt

ShIvADeSt (12-07-2011 15:12): http://forum.ru-board.com/topic.cgi?forum=33&topic=11963#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112

   

Hugo121

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Demon L
Вот это: if mid(objFolder.Name, 12, 2) = "01" - значит с 12 символа в пути к каталогу C:\Temp\IN\01январь 2-ва символа будут "01". У тебя путь другой, цифры "12" другие...
А в If mid((FSO.GetFile(AFile.Path).DateLastModified),4, 2) цифры 4 и 2 зависят от представления даты на машине, проверь раскомментировав 'msgbox FSO.GetFile(AFile.Path).DateLastModified , у меня 01.12.2009 (т.е. 4, 2 = 12).
Если у тебя дата представлена как 2009.12.01 например, то тогда поменяй в коде на 6, 2.
Я только не уверен, меняется ли это представление даты от настроек системы, где оно её берёт, из биоса или виндовса, не вникал...

Всего записей: 128 | Зарегистр. 14-08-2007 | Отправлено: 10:36 08-12-2009 | Исправлено: Hugo121, 10:53 08-12-2009
Demon L



Lite FSB
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Hugo121
понял, но так крайне не удобно.
можно сделать так чтоб он сортировал файлы только в каталоге в котором сам находиться (IN)? (дело в том что путь символы которого нужно посчитать, меняется каждый месяц, по этому пересчитывать это каждый месяц не реально...) то есть я положу скрипт в паку IN и он внутри этой паки будет сортировать файлы *.msg ?

Всего записей: 375 | Зарегистр. 24-07-2003 | Отправлено: 11:14 08-12-2009 | Исправлено: Demon L, 11:16 08-12-2009
Hugo121

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно, но тут я пока пас, рабочего примера кода нет (как и выше не было, из интереса дома собирал), может кто поопытнее напишет, мне работать надо...

Всего записей: 128 | Зарегистр. 14-08-2007 | Отправлено: 11:18 08-12-2009
vlth

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Demon L
 
Это надо?

Код:
Option Explicit
Dim fso, oFile, oFolder, oSubFolder, strNMonth
Const cstrPath = "C:\tmp\in"
 
Set fso = wsh.CreateObject("Scripting.FileSystemObject")
Set oFolder = fso.GetFolder(cstrPath)
 
For Each oFile In oFolder.Files
    If LCase(Right(oFile.Name, 4)) = ".msg" Then
        strNMonth = CStr(Month(oFile.DateLastModified))
        For Each oSubFolder In oFolder.SubFolders
            If Left(oSubFolder.Name, 2) = strNMonth Then _
                oFile.Move oSubFolder.Path & "\" & oFile.Name
        Next
    End If
Next

 
Добавлено:
P.S. Скрипт не предусматривает обработку ошибок в случае совпадения имён файлов в целевой и исходной папках

Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 14:58 08-12-2009 | Исправлено: vlth, 16:29 08-12-2009
Hugo121

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я свой код подправил, обрабатывает папку с скриптом:

Код:
 
Dim FSO
Dim TheFolder, TheFiles, AFile
Dim objFolder
Dim sep, nov, dec
 
on error resume next'иначе выкидывает ошибки после перемещения
 
Set FSO = CreateObject("Scripting.FileSystemObject")
 
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
 
MyPath = left (WScript.ScriptFullName, (Len(WScript.ScriptFullName))-(Len(WScript.ScriptName)))  
MyPathShort = Left(MyPath, Len(MyPath)-1)
 
Set colSubfolders = objWMIService.ExecQuery _
    ("Associators of {Win32_Directory.Name='" & MyPathShort & "'} " _
        & "Where AssocClass = Win32_Subdirectory " _
            & "ResultRole = PartComponent")
 
For Each objFolder in colSubfolders
if mid(objFolder.Name, 12, 2) = "09" Then sep = objFolder.Name ' : msgbox "OK: " & objFolder.Name ': msgbox "september: " & sep  
if mid(objFolder.Name, 12, 2) = "11" Then nov = objFolder.Name
if mid(objFolder.Name, 12, 2) = "12" Then dec = objFolder.Name
'msgbox "objFolder Name: " & objFolder.Name '
 
Next
 
Set TheFolder = FSO.GetFolder(MyPath) 'Каталог, где смотреть
Set TheFiles = TheFolder.Files
 
For Each AFile In TheFiles
    If UCase(FSO.GetExtensionName(AFile.Path)) = "MSG" then
        'msgbox FSO.GetFile(AFile.Path).DateLastModified
         if sep <> "" then : If mid((FSO.GetFile(AFile.Path).DateLastModified),4, 2) = "09" Then FSO.MoveFile AFile.Path , sep & "\"
         if nov <> "" then : If mid((FSO.GetFile(AFile.Path).DateLastModified),4, 2) = "11" Then FSO.MoveFile AFile.Path , nov & "\"
         if dec <> "" then : If mid((FSO.GetFile(AFile.Path).DateLastModified),4, 2) = "12" Then FSO.MoveFile AFile.Path , dec & "\"
    end if
 next
 
 

 
Добавлено:
vlth - погонял чуток Ваш код - вначале не хотел вообще работать, теперь работает, но только с двузначными месяцами.
Мучил Format, не получается пока...

Код:
 
Dim fso, oFile, oFolder, oSubFolder, strNMonth  
Const cstrPath = "C:\temp\IN"  
 
Set fso = wsh.CreateObject("Scripting.FileSystemObject")  
Set oFolder = fso.GetFolder(cstrPath)  
For Each oFile In oFolder.Files  
    If UCase(FSO.GetExtensionName(oFile.Path)) = "MSG" Then
        strNMonth = CStr(Month(oFile.DateLastModified))
        msgbox strNMonth 'вот здесь надо добиться 2-х знаков
 
        For Each oSubFolder In oFolder.SubFolders  
            If Left(oSubFolder.Name, 2) = strNMonth Then _  
                oFile.Move oSubFolder.Path & "\" & oFile.Name  
        Next  
    End If  
Next  
 

Ну и надо прикрутить к текущей папке. Вообще красиво и компактно может получиться, возьму на вооружение, когда сделаем.
 
Так, 2 цифры сделал грубо ломом  
if len(strNMonth) = 1 then strNMonth = "0" & strNMonth
работает Осталась текущая папка...

Всего записей: 128 | Зарегистр. 14-08-2007 | Отправлено: 16:10 08-12-2009 | Исправлено: Hugo121, 16:52 08-12-2009
vlth

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Hugo121
 

Цитата:
msgbox strNMonth 'вот здесь надо добиться 2-х знаков  

 
Это если только целевые папки содержат 2 цифры в начале своих названий:
 
If Len(strNMonth) = 1 Then strNMonth = "0" & strNMonth

Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 16:49 08-12-2009 | Исправлено: vlth, 16:50 08-12-2009
Hugo121

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vlth
И Вы ломом...
2 цифры были в условии, так оно обычно и есть.

Всего записей: 128 | Зарегистр. 14-08-2007 | Отправлено: 16:53 08-12-2009 | Исправлено: Hugo121, 16:54 08-12-2009
vlth

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
2 цифры были в условии

 
Да, да, конечно
 
 
 
Добавлено:
Уппс... не понял сначала про "лом"
Если форматом, то так:  
strNMonth = Format(strNMonth, "0#")
Только это в wsh не работает...

Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 17:05 08-12-2009 | Исправлено: vlth, 17:23 08-12-2009
Hugo121

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Только это в wsh не работает
- то-то не получалось... А как в wsh красиво сделать?

Всего записей: 128 | Зарегистр. 14-08-2007 | Отправлено: 17:29 08-12-2009
vlth

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А как в wsh красиво сделать?

 
Ну, если это "красиво", можно так:
strNMonth = Right("0" & CStr(Month(oFile.DateLastModified)),2)

Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 17:46 08-12-2009
Demon L



Lite FSB
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vlth
Hugo121
 
Уважаемые Огромное спасибо...
Получился почти идеал… вот только как работать из текущей папки  и что нужно поменять чтоб  скрипт файлы сложил не в IN\01 (02 03 04….12) а в IN\box\01 (02 03 04…12)
PS. нужны оба варианта.

Всего записей: 375 | Зарегистр. 24-07-2003 | Отправлено: 02:03 09-12-2009 | Исправлено: Demon L, 03:12 09-12-2009
Hugo121

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Demon L
С помощью vlth первый вариант:

Код:
 
Option Explicit
 
Dim FSO, oFile, oFolder, oSubFolder, strNMonth  
Dim ScPath
 
ScPath = left(WScript.ScriptFullName, (Len(WScript.ScriptFullName))-(Len(WScript.ScriptName))-1)  
 
Set FSO = CreateObject("Scripting.FileSystemObject")  
Set oFolder = FSO.GetFolder(ScPath)  
For Each oFile In oFolder.Files  
    If UCase(FSO.GetExtensionName(oFile.Path)) = "MSG" Then
        strNMonth = Right("0" & CStr(Month(oFile.DateLastModified)),2)
        For Each oSubFolder In oFolder.SubFolders  
            If Left(oSubFolder.Name, 2) = strNMonth Then _  
                oFile.Move oSubFolder.Path & "\" & oFile.Name  
        Next  
    End If  
Next  
 
 

Работает из текущей паки.
если строку oFile.Move oSubFolder.Path & "\" & oFile.Name  
заменить на    FSO.MoveFile oFile.Path , oSubFolder.Path & "\"
тоже работает, но периодически ругается на отсустствие файла.
Обходится с помощью on error resume next в начале кода.
Над вторым вариантом надо подумать...
 
Подумал:

Код:
 
Option Explicit
 
Dim FSO, oFile, oFolder, oFolderBox, oSubFolder, strNMonth  
Dim ScPath, ScPathBox
 
ScPath = left(WScript.ScriptFullName, (Len(WScript.ScriptFullName))-(Len(WScript.ScriptName))-1)  
ScPathBox = ScPath & "\box"
 
Set FSO = CreateObject("Scripting.FileSystemObject")  
Set oFolder = FSO.GetFolder(ScPath)  
Set oFolderBox = FSO.GetFolder(ScPathBox)  
 
For Each oFile In oFolder.Files  
    If UCase(FSO.GetExtensionName(oFile.Path)) = "MSG" Then
        strNMonth = Right("0" & CStr(Month(oFile.DateLastModified)),2)
        For Each oSubFolder In oFolderBox.SubFolders  
            If Left(oSubFolder.Name, 2) = strNMonth Then _  
                oFile.Move oSubFolder.Path & "\" & oFile.Name  
        Next  
    End If  
Next  
 

Всего записей: 128 | Зарегистр. 14-08-2007 | Отправлено: 09:06 09-12-2009 | Исправлено: Hugo121, 09:13 09-12-2009
cin



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
кто нибудь подскажет как скопировать файл с шары?
скрипт запускается с системными правами, там полный доступ на локальную тачку но нет доступа на шары, надо скопировать файл с шары. куда  копать?

Всего записей: 53 | Зарегистр. 26-12-2006 | Отправлено: 10:48 09-12-2009
Demon L



Lite FSB
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Hugo121
Спасибо, вроде все хорошо... тестирую..
 
а для чего менять
Цитата:
если строку oFile.Move oSubFolder.Path & "\" & oFile.Name  
заменить на    FSO.MoveFile oFile.Path , oSubFolder.Path & "\"  

 ?

Всего записей: 375 | Зарегистр. 24-07-2003 | Отправлено: 00:00 11-12-2009
Hugo121

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
а для чего менять  

Да так, если кто будет вникать/модифицировать - для информации. Оказывается, есть большое различие между oFile.Move и FSO.MoveFile в синтаксисе и механизме операции.

Всего записей: 128 | Зарегистр. 14-08-2007 | Отправлено: 09:07 11-12-2009
GRom V

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
У меня Win7... создал для дома профиль обычного пользователя - не админа.
При запуске проги от имени админа постоянно просит ввести пароль. Но пароль админа давать глупо. Можно как нить сделать чтоб пароль вводился автоматом?

Всего записей: 466 | Зарегистр. 31-10-2006 | Отправлено: 15:43 12-12-2009
SANIOK_AV



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток!
Подскажите пожалуйста  как присвоить переменной (к примеру "rezault") значение трёх последних строк текстового файла 1.txt?

Код:
Set FSO=WScript.CreateObject("Scripting.FileSystemObject")
Set F=FSO.OpenTextFile("C:\1.txt",1)
...
rezault=...

Заранее благодарен!!!

Всего записей: 485 | Зарегистр. 31-03-2009 | Отправлено: 18:44 14-12-2009
vlth

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
Dim fso, f, strText, rezault
Dim i, k
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("C:\1.txt", 1)
strText = f.ReadAll
Do
    rezault = Right(strText, i)
    i = i + 1
    If Left(rezault, 1) = Chr(13) Then k = k + 1
Loop While k < 3
rezault = Right(rezault, i - 3)

 
Если в конце текста будет 1 перевод строки, то переменная rezault будет содержать 2 значащих строки и одну пустую (если 2 перевода строки - одну значащую и 2 пустые и т.д.)
Поэтому приведённый код, если это существенно, требует доработки для игнорирование пустых строк в конце текста.

Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 23:23 14-12-2009
SANIOK_AV



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vlth
Спасибо большое!
Работает!!!

Всего записей: 485 | Зарегистр. 31-03-2009 | Отправлено: 12:33 15-12-2009
ZolotnikOV



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может кто знает как задать в скрипте для скачивания в фтп (CuteFTP), в имени папки, что будет скачаваться текущую дату в формате YYYY-MM-DD?    
Какие то переменные или как? можно же как то подставлять текущую дату?
Спасибо.

----------
— Ах, вы думали? Вы, значит, иногда думаете? Вы — мыслитель? Как ваша фамилия, мыслитель? Спиноза? Жан-Жак Руссо? Марк Аврелий?

Всего записей: 393 | Зарегистр. 26-11-2007 | Отправлено: 14:07 17-12-2009
   

Страницы: 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript
ShIvADeSt (12-07-2011 15:12): http://forum.ru-board.com/topic.cgi?forum=33&topic=11963#1


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru