Ну да. Просто там должны лежать несколько папок (типа TEMP), в которые падают файлы, бекапы и просто мусор. И их переименовывать не надо.Можно. Только вопрос - эти папки лежат непосредственно в твоей "PageStory" или могут быть в подкаталогах этой папки? Или пропускать по маске названия в любом месте?
Добавление имя каталога к именам выделенных файлов?
Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik
Последний раз редактировалось MStin Пн ноя 21, 2005 17:02, всего редактировалось 1 раз.
Да не можеь быть! Может у тебя висит в памяти старый скрипт, вот он и меняет?Все равно меняет!
На всякий случай привожу скрипт полностью:
Код: Выделить всё
'======================================================================
' Переименование файлов в указанном каталоге с заданной периодичностью
' К имени файла добавляется приставка - имя родительского каталога
' Поодерживается двойное вложение подкаталогов
'======================================================================
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Что значит "ну да"? Я же дважды написал "или". Какой из вариантов нужен?Ну да. Просто там должны лежать несколько папок (типа TEMP), в которые падают файлы, бекапы и просто мусор. И их переименовывать не надо.
Напиши более четко. Варианты:
1. Пропускать папки, которые лежат непосредственно в PageStory и имеют имена Temp1 и Temp2.
2. Пропускать папки, которые лежат где-то во вложенных папках в PageStory и имеют маску Temp*.
Готово:
Код: Выделить всё
'================================================================================
' Переименование файлов в указанном каталоге с заданной периодичностью
' К имени файла добавляется приставка - имя родительского каталога
' Поодерживается двойное вложение подкаталогов
'================================================================================
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
Можно. Для этого и сделал массивом.А имена каталогов в Array можно менять?
Поправил:Единственно, в этих 4-х папках (которые не троаются) файлы не должны переименовываться и во-вложенных каталогах. (Там они будут присутствовать).
Код: Выделить всё
'================================================================================
' Переименование файлов в указанном каталоге с заданной периодичностью
' К имени файла добавляется приставка - имя родительского каталога
' Поодерживается двойное вложение подкаталогов
'================================================================================
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Чччерт. Выдает ошибку.
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" 'Сканируемый каталог "
То вроде все нормально
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" 'Сканируемый каталог "
То вроде все нормально
- Ciber SLasH
- Сообщения: 209
- Зарегистрирован: Сб авг 20, 2005 21:41
- Откуда: С.-Петербург
После вышеприведенного было добавлено обрамление строки, где выполняется переименование на случай возникновения ошибки:
Т.е. если еще идет процесс копирования файла, а скрипт пытается его переименовать, то пропускаем. Далее попытка переименования будет при следующем сканировании каталогов.
На Jscript для этого надо смотреть в сторону try...catch…finally.
Код: Выделить всё
On Error Resume Next
FSO.MoveFile ScanFile, MyFolder1.Path & "\" & MyDirName & Delimiter & ScanFileName
On Error GoTo 0На Jscript для этого надо смотреть в сторону try...catch…finally.