View previous topic :: View next topic |
Author |
Message |
MStin
Joined: 17 Nov 2005 Posts: 24
|
(Separately) Posted: Mon Nov 21, 2005 17:32 Post subject: |
|
|
Quote: | Можно. Только вопрос - эти папки лежат непосредственно в твоей "PageStory" или могут быть в подкаталогах этой папки? Или пропускать по маске названия в любом месте? |
Ну да. Просто там должны лежать несколько папок (типа TEMP), в которые падают файлы, бекапы и просто мусор. И их переименовывать не надо.
Last edited by MStin on Mon Nov 21, 2005 18:02; edited 1 time in total |
|
Back to top |
|
|
MStin
Joined: 17 Nov 2005 Posts: 24
|
(Separately) Posted: Mon Nov 21, 2005 17:37 Post subject: |
|
|
Неа
Все равно меняет! |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Mon Nov 21, 2005 18:14 Post subject: |
|
|
Да не можеь быть! Может у тебя висит в памяти старый скрипт, вот он и меняет?
На всякий случай привожу скрипт полностью:
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
MykeyValue = True
WshShell.RegWrite MyKey, MykeyValue
Do While MykeyValue
MySubFolders = ""
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(Mid(MySubFolders, 2), 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 |
Quote: | Ну да. Просто там должны лежать несколько папок (типа TEMP), в которые падают файлы, бекапы и просто мусор. И их переименовывать не надо. |
Что значит "ну да"? Я же дважды написал "или". Какой из вариантов нужен?
Напиши более четко. Варианты:
1. Пропускать папки, которые лежат непосредственно в PageStory и имеют имена Temp1 и Temp2.
2. Пропускать папки, которые лежат где-то во вложенных папках в PageStory и имеют маску Temp*. |
|
Back to top |
|
|
MStin
Joined: 17 Nov 2005 Posts: 24
|
(Separately) Posted: Mon Nov 21, 2005 18:36 Post subject: |
|
|
Все! Супер. Работает. Видимо ты был прав.
1. Да, но только Temp, HighRes, LowRes, Quest. Ну вроде и всё.
2. Нет, этого нет. В смысле, не надо |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Mon Nov 21, 2005 19:51 Post subject: |
|
|
Готово:
Code: |
'================================================================================
' Переименование файлов в указанном каталоге с заданной периодичностью
' К имени файла добавляется приставка - имя родительского каталога
' Поодерживается двойное вложение подкаталогов
'================================================================================
Dim Mydir, Mysleep, Delimiter, MyKey
'========== Изменяемые параметры ================================================
Mydir = "E:\PAGE STORE\" 'Сканируемый каталог
Delimiter = "_" 'Разделитель после приставки
Mysleep = 10000 'Пауза между сканированием в милисекундах
MyKey = "HKCU\Environment\RunningMyScript" 'Ключ в реестре
NotInProc = Array("Temp", "HighRes", "LowRes", "Quest") 'Папки не обрабатываются
'================================================================================
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, Scan4Not, Pos4Not
MykeyValue = True
WshShell.RegWrite MyKey, MykeyValue
Do While MykeyValue
MySubFolders = ""
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
For Each Scan4Not in NotInProc
Pos4Not = InStr(MySubFolders & chr(13), "\" & Scan4Not & chr(13))
If Pos4Not > 0 Then
MySubFolders = Mid(MySubFolders, 1, Pos4Not - Len(Mydir) - 1) & Mid(MySubFolders, Pos4Not + Len(Scan4Not) + 1)
End If
Next
MySubFolders = Split(Mid(MySubFolders, 2), 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
|
|
|
Back to top |
|
|
MStin
Joined: 17 Nov 2005 Posts: 24
|
(Separately) Posted: Mon Nov 21, 2005 20:11 Post subject: |
|
|
Мощь!!!! Просто невозможную работу ты сделал!!
А имена каталогов в Array можно менять? "Ах какой полезный приборчик!"©
Большое человеческое спасибо. Чувствую, пора изучать VB |
|
Back to top |
|
|
MStin
Joined: 17 Nov 2005 Posts: 24
|
(Separately) Posted: Mon Nov 21, 2005 20:58 Post subject: |
|
|
Единственно, в этих 4-х папках (которые не троаются) файлы не должны переименовываться и во-вложенных каталогах. (Там они будут присутствовать). Извини, что не предупредил |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Nov 22, 2005 11:17 Post subject: |
|
|
Quote: | А имена каталогов в Array можно менять? |
Можно. Для этого и сделал массивом.
Quote: | Единственно, в этих 4-х папках (которые не троаются) файлы не должны переименовываться и во-вложенных каталогах. (Там они будут присутствовать). |
Поправил:
Code: | '================================================================================
' Переименование файлов в указанном каталоге с заданной периодичностью
' К имени файла добавляется приставка - имя родительского каталога
' Поодерживается двойное вложение подкаталогов
'================================================================================
Dim Mydir, Mysleep, Delimiter, MyKey
'========== Изменяемые параметры ================================================
Mydir = "E:\PAGE STORE\" 'Сканируемый каталог
Delimiter = "_" 'Разделитель после приставки
Mysleep = 10000 'Пауза между сканированием в милисекундах
MyKey = "HKCU\Environment\RunningMyScript" 'Ключ в реестре
NotInProc = Array("Temp", "HighRes", "LowRes", "Quest") 'Папки не обрабатываются
'================================================================================
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
Dim Scan4Not, Pos4Not, Pos4Not1, SearchStr
MykeyValue = True
WshShell.RegWrite MyKey, MykeyValue
Do While MykeyValue
MySubFolders = ""
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
For Each Scan4Not in NotInProc
SearchStr = chr(13) & Mydir & Scan4Not
Pos4Not = InStr(MySubFolders, SearchStr)
Do While Pos4Not > 0
Pos4Not1 = InStr(Pos4Not + 1, MySubFolders & chr(13), chr(13))
MySubFolders = Mid(MySubFolders, 1, Pos4Not - 1) & Mid(MySubFolders, Pos4Not + Pos4Not1 - 1)
Pos4Not = InStr(MySubFolders, SearchStr)
Loop
Next
MySubFolders = Split(Mid(MySubFolders, 2), 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 |
|
|
Back to top |
|
|
MStin
Joined: 17 Nov 2005 Posts: 24
|
(Separately) Posted: Tue Nov 22, 2005 12:20 Post subject: |
|
|
Чччерт. Выдает ошибку.
Line: 44
Char: 5
Error: Path not found
Code: 800A004C
Source: Microsoft VBScript runtime error
Видимо пробел в имени "Page Story" не нравиться
Если в
"Mydir = "E:\PAGE STORE\" 'Сканируемый каталог "
сделать
"Mydir = "E:\PAGE STORE" 'Сканируемый каталог "
То вроде все нормально |
|
Back to top |
|
|
MStin
Joined: 17 Nov 2005 Posts: 24
|
(Separately) Posted: Tue Nov 22, 2005 12:24 Post subject: |
|
|
Вылезла другая засада. В момент копирования в Page Story скрипт видимо пытается переименовать файлы и из-за этого выдает следующее:
Line 50
Char: 9
Error: Permission denied
и далее тоже самое, что и раньше
|
|
Back to top |
|
|
MStin
Joined: 17 Nov 2005 Posts: 24
|
(Separately) Posted: Tue Nov 22, 2005 12:25 Post subject: |
|
|
Но если запустить скрипт после коп-ния, то все ОК |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Nov 22, 2005 12:30 Post subject: |
|
|
MStin
Хм...
У меня, вроде, все нормально. Пришли мне, пожалуйста, архив каталога Page Story (файлы можно сделать нулевыми) по почте - мыло я бросил тебе в личку. И давай теперь общаться по почте, т.к. вряд ли кого-то еще интересует этот скрипт. |
|
Back to top |
|
|
MStin
Joined: 17 Nov 2005 Posts: 24
|
(Separately) Posted: Tue Nov 22, 2005 12:37 Post subject: |
|
|
OK
Неужели это никому не интересно???
Такая важная ветка |
|
Back to top |
|
|
Ciber SLasH
Joined: 20 Aug 2005 Posts: 209 Location: С.-Петербург
|
(Separately) Posted: Wed Nov 23, 2005 17:15 Post subject: |
|
|
Batya wrote: | т.к. вряд ли кого-то еще интересует этот скрипт. |
Останьтесь, очень даже интересует. Мне интересен сам принцип, т.к. я в VB очень слабо шурупаю, а в JScript поболее. Поэтому стараюсь примеры на VB переводить в JScript.
Продолжайте обсуждение... |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Wed Nov 23, 2005 17:23 Post subject: |
|
|
После вышеприведенного было добавлено обрамление строки, где выполняется переименование на случай возникновения ошибки:
Code: | On Error Resume Next
FSO.MoveFile ScanFile, MyFolder1.Path & "\" & MyDirName & Delimiter & ScanFileName
On Error GoTo 0 |
Т.е. если еще идет процесс копирования файла, а скрипт пытается его переименовать, то пропускаем. Далее попытка переименования будет при следующем сканировании каталогов.
На Jscript для этого надо смотреть в сторону try...catch…finally. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|