Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Перемещение файлов в только, что созданную папку из контекстного меню.

Ответить
Настройки темы
VBS/WSH/JS - Перемещение файлов в только, что созданную папку из контекстного меню.

Пользователь


Сообщения: 78
Благодарности: 23

Профиль | Отправить PM | Цитировать


Здраствуйте...
Возможно, ли воплотить посредством написания скрипта на VBS перемещение в папку выделенных файлов из контекстного меню?
Что бы было более понятно, скажу, что такой пункт есть в программе "FileMenu Tools".
Пытался использовать:
Код: Выделить весь код
On Error Resume Next 
Dim Message, fso, Text, FolderName, FileName, Title
Message = "Введите название:"
Title = "Создание папки"
'создаем объект FileSystemObject в переменную fso
Set fso = CreateObject("Scripting.FileSystemObject")
FolderName = InputBox(Message, Title) 
Set Fldr = fso.CreateFolder ("" & FolderName)
и
Код: Выделить весь код
On error resume next
Dim objWshShell, strFolderName, strFullFolderName, Message, Title
Message = "Введите название:"
Title = "Создание папки"
Set objFSO      = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell = WScript.CreateObject("WScript.Shell")
    strFolderName = InputBox(Message, Title) 
   strFullFolderName = objFSO.BuildPath(objWshShell.SpecialFolders("C , D ,"), strFolderName)
 If objFSO.FolderExists(strFullFolderName) Then
    WScript.Echo "Папка с таким именем уже существует."
Else
    objFSO.CreateFolder strFullFolderName
    WScript.Echo "Folder [" & strFullFolderName & "] created."
 End If
Set objWshShell = Nothing
Set objFSO      = Nothing
  WScript.Quit 0
Эти два скрипта отлично справляются со своей задачей, по созданию папок.Но вот, чтобы переместить в созданную этими скриптами папку файлы...Полный ступор.
Пробывал через:
Код: Выделить весь код
Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys("^X")
и
Код: Выделить весь код
Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys("^V")
Но не хватает знаний.Прошу помощи.Буду признателен.

Отправлено: 19:59, 08-12-2010

 

Пользователь


Сообщения: 78
Благодарности: 23

Профиль | Отправить PM | Цитировать


Цитата OSArev:
Но проявилась ещё одна бяка.
Работает только для 18-и, 20-и объектов. Может, кто подскажет, как победить это несчастье. На данном этапе не могу этого догнать.
Спасибо. »
Ну, что, ребята. Подскажите, что-нибудь.
И ещё иногда появляется ошибка:"Отказано в доступе". Это, наверное связано с именами - не дойдёт до меня никак.
Помогите, пожалуйста.

Отправлено: 01:06, 26-02-2011 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


OSArev, а не получилось победить 18(20) объектов?

Отправлено: 22:48, 27-02-2011 | #12


Пользователь


Сообщения: 78
Благодарности: 23

Профиль | Отправить PM | Цитировать


Цитата alpap:
OSArev, а не получилось победить 18(20) объектов? »
Пока ни до чего не "дотумкался".
Если есть, какие идеи - поделись.

Отправлено: 19:37, 28-02-2011 | #13


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


OSArev я в программировании не силен, но есть такая мысль. Если как-то программно начинать так:
Выполняется команда "вырезать" потом уже создать папку, вставить в нее файлы и дать возможность выбрать имя папки. То есть, если ничего не выделено, то и скрипт не будет выполняться, а если выделен один объект или любое их количество то выполняется команда вырезать и далее. Не знаю можно ли так, просто к размышлению.

Отправлено: 13:59, 03-03-2011 | #14


Пользователь


Сообщения: 78
Благодарности: 23

Профиль | Отправить PM | Цитировать


Цитата alpap:
OSArev я в программировании не силен, но есть такая мысль. Если как-то программно начинать так:
Выполняется команда "вырезать" потом уже создать папку, вставить в нее файлы и дать возможность выбрать имя папки. То есть, если ничего не выделено, то и скрипт не будет выполняться, а если выделен один объект или любое их количество то выполняется команда вырезать и далее. Не знаю можно ли так, просто к размышлению. »
Я уже работал в этом направлении(и скриптик написал), но есть пару недоработок.
1.Во время выполнения скрипта нельзя кликать мышкой, т.к. объекты переместятся в то место где кликнули мышкой.
2.При перемещении папка у меня остаётся открытой.
В каком направлении идти?
1-мысля:
Надо бы наверное найти способ отслеживать вновь созданную папку и ту же закрывать, но это не спасёт от случайного кликанья мышкой.
2-я мысля:
Отключать на время исполнения скрипта мышь(вроде бы где-то встречал).
3-я мысля:
Вырезать, как обычно, а из буфера перемещать уже по-другому, но вот каким образом?
Собственно скриптик:
Код: Выделить весь код
'Разрешаем запуск только одного экземпляра, при помощи создания временного файла c именем скрипта:
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists("C:\Windows\OSA\Moving_to_folder\" & WScript.ScriptName & ".txt") Then
    WScript.Quit
End If
FSO.CreateTextFile "C:\Windows\OSA\Moving_to_folder\" & WScript.ScriptName & ".txt"
'-----------------------------------------------------
'Создание папки:
Dim objFSO, objFolder, objShell, strDirectory
 strDirectory = InputBox("Введите название папки", "Перемещение объектов.") 
  If Len(strDirectory) = 0 Then

   FSO.DeleteFile "C:\Windows\OSA\Moving_to_folder\" & WScript.ScriptName & ".txt"

  strDirectory = WScript.Quit
End If 

FSO.DeleteFile "C:\Windows\OSA\Moving_to_folder\" & WScript.ScriptName & ".txt"

 On Error Resume Next
   Set objFSO = CreateObject("Scripting.FileSystemObject") 
    If objFSO.FolderExists(strDirectory) Then 
   Set objFolder = objFSO.GetFolder(strDirectory) 
    Else
   Set objFolder = objFSO.CreateFolder(strDirectory) 
  End If
'----------------------------------- 
'Узнаём путь к новой папке:
  on error resume next
  Folderspec = strDirectory
   Set fso = CreateObject( "Scripting.FileSystemObject" ) 
   Set folder = fso.GetFolder(folderSpec)
'------------------------------
' Используем "Вырезать" для перемещения объектов:
   Set WshShell = CreateObject("WScript.Shell")
       WshShell.SendKeys("^X")
'--------------------------
' Перемещаем объекты при помощи "Вставить":
folder = folder.Path & "\"    
   set shapp = createobject("shell.application")
   shapp.open(folder)
       WScript.Sleep 500
       WshShell.SendKeys("^V")
'------------------------
' Удаляем временные файлы:
FSO.DeleteFile "C:\Windows\OSA\Moving_to_folder\" & WScript.ScriptName & ".txt"
WScript.Quit
Извиняюсь, за недоработки. Может ,кто поможет подправить мои ошибки.

Кстати, насчёт:
Цитата alpap:
OSArev, а не получилось победить 18(20) объектов? »
натолкнулся, сегодня случайно вот на такую документацию по реестру:

"Как известно, при выделении более 15 файлов команды контекстного меню, такие как "Открыть/Печать/Редактировать" становятся недоступны.
Для отмены данного ограничения проделайте следующее:

1) Запустите редактор реестра ( Win+R -> regedit -> OK)
2) Откройте ветку HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer
3) Создайте в ней параметр MultipleInvokePromptMinimum типа DWORD.
4) Установите значение данного параметра равным 16.

Для уменьшения количества файлов на которых действует ограничение применения команд, введите значение от 1 до 15.
При выделении файлов выше выбранного Вами значения команды в контекстном меню применяться не будут. При указании значения 0 произойдет полное отключение команд, включая команду "Открыть". "

Так, что рыть, при перемещении из контекстного, надо в другом направлении(для других команд то же самое). В каком?
Может кто и подскажет?

Отправлено: 22:08, 03-03-2011 | #15


Пользователь


Сообщения: 68
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата OSArev:
перемещение в папку выделенных файлов из контекстного меню »
On Error Resume Next
if WScript.Arguments.Count = 0 then WScript.Quit
Arg = WScript.Arguments(0)
set FSO=CreateObject ("Scripting.FileSystemObject")
File = Arg
FileName = FSO.GetBaseName(File)
FileName_ext = FSO.GetFileName(File)
ParentFolder = Left(Arg, InStrRev(Arg, "\"))
NewFolderPath = ParentFolder & "01.Перемещённое"
NewFilePath = NewFolderPath & "\" & FileName_ext
If not FSO.folderexists (NewFolderPath) then
fso.createfolder (NewFolderPath)
end if
If Not FSO.FileExists(NewFilePath) Then
FSO.MoveFile File, NewFolderPath & "\"
Else
MsgBox "Файл " & FileName_ext & " Уже существует в папке " & NewFolderPath, vbOKOnly + vbExclamation, "Внимание!"
End If
Set FSO = Nothing
Wscript.Quit

Отправлено: 00:02, 09-06-2024 | #16



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Перемещение файлов в только, что созданную папку из контекстного меню.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] задержка при вызове контекстного меню файлов twisted1 Microsoft Windows 2000/XP 34 24-05-2017 11:10
Интерфейс - Настройка контекстного меню файлов/папок/дисков .:[все вопросы]:. zhecka Microsoft Windows 2000/XP 294 23-09-2015 19:34
CMD/BAT - [решено] Перемещение устаревших файлов из папки в резервную папку zavoruev Скриптовые языки администрирования Windows 22 28-05-2010 14:04
Интерфейс - запрет контекстного меню только на рабочем столе alexataa Microsoft Windows 2000/XP 0 01-03-2010 00:20
не могу создать папку из контекстного меню Yarikus Microsoft Windows 95/98/Me (архив) 0 08-01-2005 10:48




 
Переход