Добавление имя каталога к именам выделенных файлов?

Обсуждение Total Commander. Установка, использование, настройка, решение проблем, скрытые функции. Обсуждение новых версий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

MStin
Сообщения: 24
Зарегистрирован: Чт ноя 17, 2005 08:09

Сообщение MStin »

1. Смотря как это будет работать. Если он будет висеть в памяти и ослеживать изменения в "PageStory", то это будет супер. Если нет, то имеет смысл разовый запуск.
2. Дело в том, после переименования, необходимо открытие файла в соотв. программе и внесение некоторого редактирования. После чего он копируется в "F:\PD_xxx_temp\.. "
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Готово.
Создай файл *.vbs с содержимым:

Код: Выделить всё

'======================================================================
' Переименование файлов в указанном каталоге с заданной периодичностью
' К имени файла добавляется приставка - имя родительского каталога
' Поддерживается двойное вложение подкаталогов
'======================================================================

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 с содержимым:

Код: Выделить всё

WScript.CreateObject("WScript.Shell").RegWrite "HKCU\Environment\RunningMyScript", "False"
Надеюсь, понятно, что критерием остановки первого скрипта будет значение False в указанном ключе реестра (это значение заносит второй скрипт).
MStin
Сообщения: 24
Зарегистрирован: Чт ноя 17, 2005 08:09

Сообщение MStin »

Понятно. Спасибо. Пойду тестить.
А переменные можно менять?
Типа вместо "_" поставить "."?
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

MStin
Не сразу заметил последний твой пост.
1.
Если он будет висеть в памяти и ослеживать изменения в "PageStory", то это будет супер.
Именно это я и сделал.
2. Если все эти файлы - обычный текст, то я могу их править скриптом, ну а уж потом переносить. Иначе, могу только выполнить вызов этих файлов (в ассоциированной программе).
MStin
Сообщения: 24
Зарегистрирован: Чт ноя 17, 2005 08:09

Сообщение MStin »

Да ладно. Пока и так здорово. А время я могу уменьшить. Или это будет сильно тормозить систему?
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

MStin
А переменные можно менять?
Типа вместо "_" поставить "."?
Конечно можно. Я даже сверху комментарий приписал - "Изменяемые параметры". Только надо учесть, что если будешь менять ключ реестра, во втором файле пропиши такой же.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

MStin
А время я могу уменьшить. Или это будет сильно тормозить систему?
Если честно, то не знаю, насколько этот скрипт ресурсотребователен. Поиграйся, сравни.
MStin
Сообщения: 24
Зарегистрирован: Чт ноя 17, 2005 08:09

Сообщение MStin »

Ну это понятно. Спасибо.
Куда слать пиво? :)
Это на Бейсике написано?
Буду разбираться. Классно!!! СУПЕР!!! Мечта сбылась!!!
MStin
Сообщения: 24
Зарегистрирован: Чт ноя 17, 2005 08:09

Сообщение MStin »

Шикарно работает :)
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

MStin
Написано на Visual Basic Script. Применяется технология Windows Script Host.
Куда слать пиво?
:) Москва, Россия
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

MStin
Шикарно работает
Старался :)
MStin
Сообщения: 24
Зарегистрирован: Чт ноя 17, 2005 08:09

Сообщение MStin »

А нельзя сделать, чтобы файлы которые попадают просто в "PageStory" не переименовывались в PageStory_***
а оставались оригинальными?
MStin
Сообщения: 24
Зарегистрирован: Чт ноя 17, 2005 08:09

Сообщение MStin »

И вообще, можно задать имена каталогов, которые бы не учавствовали в процедуре?
Спасиб :)
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

MStin
А нельзя сделать, чтобы файлы которые попадают просто в "PageStory" не переименовывались в PageStory_***
В 24 строке вместо

Код: Выделить всё

MySubFolders = MyDir
запиши

Код: Выделить всё

MySubFolders = ""
И вместо

Код: Выделить всё

MySubFolders = Split(MySubFolders, chr(13))
запиши

Код: Выделить всё

MySubFolders = Split(Mid(MySubFolders, 2), chr(13))
И вообще, можно задать имена каталогов, которые бы не учавствовали в процедуре?
Можно. Только вопрос - эти папки лежат непосредственно в твоей "PageStory" или могут быть в подкаталогах этой папки? Или пропускать по маске названия в любом месте?
MStin
Сообщения: 24
Зарегистрирован: Чт ноя 17, 2005 08:09

Сообщение MStin »

Thx!
Щас заценю :)
Ответить