View previous topic :: View next topic |
Author |
Message |
MStin
Joined: 17 Nov 2005 Posts: 24
|
(Separately) Posted: Mon Nov 21, 2005 14:31 Post subject: |
|
|
1. Смотря как это будет работать. Если он будет висеть в памяти и ослеживать изменения в "PageStory", то это будет супер. Если нет, то имеет смысл разовый запуск.
2. Дело в том, после переименования, необходимо открытие файла в соотв. программе и внесение некоторого редактирования. После чего он копируется в "F:\PD_xxx_temp\.. " |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Mon Nov 21, 2005 15:57 Post subject: |
|
|
Готово.
Создай файл *.vbs с содержимым:
Code: |
'======================================================================
' Переименование файлов в указанном каталоге с заданной периодичностью
' К имени файла добавляется приставка - имя родительского каталога
' Поддерживается двойное вложение подкаталогов
'======================================================================
Dim Mydir, Mysleep, Delimiter, MyKey
'========== Изменяемые параметры =======================================
Mydir = "E:\PAGE STORE\" 'Сканируемый каталог
Delimiter = "_" 'Разделитель после приставки
Mysleep = 10000 'Пауза между сканированием в миллисекундах
MyKey = "HKCU\Environment\RunningMyScript" 'Ключ в реестре
'=======================================================================
Dim FSO, WshShell, MyFolder, MyFolder1
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set MyFolder = FSO.GetFolder(Mydir)
Dim MykeyValue, MyDirName, ScanFile, ScanFileName, NameLen, MySubFolders, i
MykeyValue = True
WshShell.RegWrite MyKey, MykeyValue
Do While MykeyValue
MySubFolders = MyDir
For Each ScanFolder in MyFolder.SubFolders
MySubFolders = MySubFolders & chr(13) & FSO.GetFolder(ScanFolder).Path
For Each ScanFolder1 in ScanFolder.SubFolders
MySubFolders = MySubFolders & chr(13) & FSO.GetFolder(ScanFolder1).Path
Next
Next
MySubFolders = Split(MySubFolders, chr(13))
For Each ScanFolder in MySubFolders
Set MyFolder1 = FSO.GetFolder(ScanFolder)
MyDirName = MyFolder1.Name
NameLen = Len(MyDirName)
For Each ScanFile in MyFolder1.Files
ScanFileName = FSO.GetFile(ScanFile).Name
If Left(ScanFileName, NameLen) <> MyDirName Then
FSO.MoveFile ScanFile, MyFolder1.Path & "\" & MyDirName & Delimiter & ScanFileName
End If
Next
Next
MykeyValue = WshShell.RegRead(MyKey)
Wscript.Sleep Mysleep
Loop
WshShell.RegDelete MyKey
Set FSO = Nothing
Set WshShell = Nothing
Set MyFolder = Nothing
Set MyFolder1 = Nothing
WScript.Quit
|
Этот файл будет висеть в памяти и сканировать папки с интервалом 10 сек. Чтобы корректно прервать его работу, необходимо запустить другой файл *.vbs с содержимым:
Code: | WScript.CreateObject("WScript.Shell").RegWrite "HKCU\Environment\RunningMyScript", "False" |
Надеюсь, понятно, что критерием остановки первого скрипта будет значение False в указанном ключе реестра (это значение заносит второй скрипт). |
|
Back to top |
|
|
MStin
Joined: 17 Nov 2005 Posts: 24
|
(Separately) Posted: Mon Nov 21, 2005 16:05 Post subject: |
|
|
Понятно. Спасибо. Пойду тестить.
А переменные можно менять?
Типа вместо "_" поставить "."? |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Mon Nov 21, 2005 16:06 Post subject: |
|
|
MStin
Не сразу заметил последний твой пост.
1.
Quote: | Если он будет висеть в памяти и ослеживать изменения в "PageStory", то это будет супер. |
Именно это я и сделал.
2. Если все эти файлы - обычный текст, то я могу их править скриптом, ну а уж потом переносить. Иначе, могу только выполнить вызов этих файлов (в ассоциированной программе). |
|
Back to top |
|
|
MStin
Joined: 17 Nov 2005 Posts: 24
|
(Separately) Posted: Mon Nov 21, 2005 16:07 Post subject: |
|
|
Да ладно. Пока и так здорово. А время я могу уменьшить. Или это будет сильно тормозить систему? |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Mon Nov 21, 2005 16:09 Post subject: |
|
|
MStin
Quote: | А переменные можно менять?
Типа вместо "_" поставить "."? |
Конечно можно. Я даже сверху комментарий приписал - "Изменяемые параметры". Только надо учесть, что если будешь менять ключ реестра, во втором файле пропиши такой же. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Mon Nov 21, 2005 16:11 Post subject: |
|
|
MStin
Quote: | А время я могу уменьшить. Или это будет сильно тормозить систему? |
Если честно, то не знаю, насколько этот скрипт ресурсотребователен. Поиграйся, сравни. |
|
Back to top |
|
|
MStin
Joined: 17 Nov 2005 Posts: 24
|
(Separately) Posted: Mon Nov 21, 2005 16:12 Post subject: |
|
|
Ну это понятно. Спасибо.
Куда слать пиво?
Это на Бейсике написано?
Буду разбираться. Классно!!! СУПЕР!!! Мечта сбылась!!! |
|
Back to top |
|
|
MStin
Joined: 17 Nov 2005 Posts: 24
|
(Separately) Posted: Mon Nov 21, 2005 16:13 Post subject: |
|
|
Шикарно работает |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Mon Nov 21, 2005 16:15 Post subject: |
|
|
MStin
Написано на Visual Basic Script. Применяется технология Windows Script Host.
Москва, Россия |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Mon Nov 21, 2005 16:16 Post subject: |
|
|
MStin
Старался |
|
Back to top |
|
|
MStin
Joined: 17 Nov 2005 Posts: 24
|
(Separately) Posted: Mon Nov 21, 2005 16:25 Post subject: |
|
|
А нельзя сделать, чтобы файлы которые попадают просто в "PageStory" не переименовывались в PageStory_***
а оставались оригинальными? |
|
Back to top |
|
|
MStin
Joined: 17 Nov 2005 Posts: 24
|
(Separately) Posted: Mon Nov 21, 2005 16:30 Post subject: |
|
|
И вообще, можно задать имена каталогов, которые бы не учавствовали в процедуре?
Спасиб |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Mon Nov 21, 2005 16:45 Post subject: |
|
|
MStin
Quote: | А нельзя сделать, чтобы файлы которые попадают просто в "PageStory" не переименовывались в PageStory_*** |
В 24 строке вместо
Code: | MySubFolders = MyDir |
запиши
И вместо
Code: | MySubFolders = Split(MySubFolders, chr(13)) |
запиши
Code: | MySubFolders = Split(Mid(MySubFolders, 2), chr(13)) |
Quote: | И вообще, можно задать имена каталогов, которые бы не учавствовали в процедуре? |
Можно. Только вопрос - эти папки лежат непосредственно в твоей "PageStory" или могут быть в подкаталогах этой папки? Или пропускать по маске названия в любом месте? |
|
Back to top |
|
|
MStin
Joined: 17 Nov 2005 Posts: 24
|
(Separately) Posted: Mon Nov 21, 2005 17:28 Post subject: |
|
|
Thx!
Щас заценю |
|
Back to top |
|
|
|