Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Добавление имя каталога к именам выделенных файлов?
Goto page Previous  1, 2, 3, 4  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы printer-friendly view
View previous topic :: View next topic  
Author Message
MStin



Joined: 17 Nov 2005
Posts: 24

Post (Separately) Posted: Mon Nov 21, 2005 17:32    Post subject: Reply with quote

Quote:
Можно. Только вопрос - эти папки лежат непосредственно в твоей "PageStory" или могут быть в подкаталогах этой папки? Или пропускать по маске названия в любом месте?

Ну да. Просто там должны лежать несколько папок (типа TEMP), в которые падают файлы, бекапы и просто мусор. И их переименовывать не надо.


Last edited by MStin on Mon Nov 21, 2005 18:02; edited 1 time in total
Back to top
View user's profile Send private message
MStin



Joined: 17 Nov 2005
Posts: 24

Post (Separately) Posted: Mon Nov 21, 2005 17:37    Post subject: Reply with quote

Неа Sad
Все равно меняет!
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Mon Nov 21, 2005 18:14    Post subject: Reply with quote

Quote:
Все равно меняет!

Да не можеь быть! Может у тебя висит в памяти старый скрипт, вот он и меняет?
На всякий случай привожу скрипт полностью:
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
View user's profile Send private message
MStin



Joined: 17 Nov 2005
Posts: 24

Post (Separately) Posted: Mon Nov 21, 2005 18:36    Post subject: Reply with quote

Все! Супер. Работает. Видимо ты был прав.
1. Да, но только Temp, HighRes, LowRes, Quest. Ну вроде и всё.
2. Нет, этого нет. В смысле, не надо Smile
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Mon Nov 21, 2005 19:51    Post subject: Reply with quote

Готово:
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
View user's profile Send private message
MStin



Joined: 17 Nov 2005
Posts: 24

Post (Separately) Posted: Mon Nov 21, 2005 20:11    Post subject: Reply with quote

Мощь!!!! Просто невозможную работу ты сделал!!
А имена каталогов в Array можно менять? "Ах какой полезный приборчик!"© Smile
Большое человеческое спасибо. Чувствую, пора изучать VB Smile
Back to top
View user's profile Send private message
MStin



Joined: 17 Nov 2005
Posts: 24

Post (Separately) Posted: Mon Nov 21, 2005 20:58    Post subject: Reply with quote

Единственно, в этих 4-х папках (которые не троаются) файлы не должны переименовываться и во-вложенных каталогах. (Там они будут присутствовать). Извини, что не предупредил Smile
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Tue Nov 22, 2005 11:17    Post subject: Reply with quote

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
View user's profile Send private message
MStin



Joined: 17 Nov 2005
Posts: 24

Post (Separately) Posted: Tue Nov 22, 2005 12:20    Post subject: Reply with quote

Чччерт. Выдает ошибку.
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
View user's profile Send private message
MStin



Joined: 17 Nov 2005
Posts: 24

Post (Separately) Posted: Tue Nov 22, 2005 12:24    Post subject: Reply with quote

Вылезла другая засада. В момент копирования в Page Story скрипт видимо пытается переименовать файлы и из-за этого выдает следующее:
Line 50
Char: 9
Error: Permission denied
и далее тоже самое, что и раньше

Sad
Back to top
View user's profile Send private message
MStin



Joined: 17 Nov 2005
Posts: 24

Post (Separately) Posted: Tue Nov 22, 2005 12:25    Post subject: Reply with quote

Но если запустить скрипт после коп-ния, то все ОК
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Tue Nov 22, 2005 12:30    Post subject: Reply with quote

MStin
Хм...
У меня, вроде, все нормально. Пришли мне, пожалуйста, архив каталога Page Story (файлы можно сделать нулевыми) по почте - мыло я бросил тебе в личку. И давай теперь общаться по почте, т.к. вряд ли кого-то еще интересует этот скрипт.
Back to top
View user's profile Send private message
MStin



Joined: 17 Nov 2005
Posts: 24

Post (Separately) Posted: Tue Nov 22, 2005 12:37    Post subject: Reply with quote

OK
Неужели это никому не интересно???
Такая важная ветка Smile
Back to top
View user's profile Send private message
Ciber SLasH



Joined: 20 Aug 2005
Posts: 209
Location: С.-Петербург

Post (Separately) Posted: Wed Nov 23, 2005 17:15    Post subject: Reply with quote

Batya wrote:
т.к. вряд ли кого-то еще интересует этот скрипт.

Останьтесь, очень даже интересует. Мне интересен сам принцип, т.к. я в VB очень слабо шурупаю, а в JScript поболее. Поэтому стараюсь примеры на VB переводить в JScript.

Продолжайте обсуждение... Smile
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Wed Nov 23, 2005 17:23    Post subject: Reply with quote

После вышеприведенного было добавлено обрамление строки, где выполняется переименование на случай возникновения ошибки:
Code:
        On Error Resume Next
        FSO.MoveFile ScanFile, MyFolder1.Path & "\" & MyDirName & Delimiter & ScanFileName
        On Error GoTo 0

Т.е. если еще идет процесс копирования файла, а скрипт пытается его переименовать, то пропускаем. Далее попытка переименования будет при следующем сканировании каталогов.
На Jscript для этого надо смотреть в сторону try...catch…finally.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, 4  Next
Page 3 of 4

 
Jump to:  
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