1

Тема: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Необходимо выделить файлы и, из контекстного меню выбрать пункт, с командой для перемещения выделенных файлов в папку (название папки - имя первого файла).
Т.е. :

[HKEY_CLASSES_ROOT\*\shell\File Location]
 @="Создать папку с файлами"

 [HKEY_CLASSES_ROOT\*\shell\File Location\command]
 @="команда"

Помогите пожалуйста реализовать такую команду.

2

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Stoller
1) Каким образом выделить?
2) Зачем выбирать пункт, когда существуют встроенные методы перемещения?
3) И почему bat, а не vbs/js?

3 (изменено: Stoller, 2016-07-26 12:44:08)

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Flasher пишет:

1) Каким образом выделить?

Обыкновенное выделение в проводнике нескольких файлов (выделяем первый файл, Shift + позиционируемся на последний файл) либо выделение нескольких файлов ПКМ в Total Commander_е.

Flasher пишет:

2) Зачем выбирать пункт, когда существуют встроенные методы перемещения?

Так гораздо удобнее - переместить все выделенные файлы в другую папку, одним кликом пункта меню ...

Flasher пишет:

3) И почему bat, а не vbs/js?

vbs/js предполагает использование отдельного файла скрипта, что не желательно и более громоздко...
А для данной задачи ведь достаточно команды одной строкой в реестре.

4

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Stoller
1) Этим занимается пользователь. А я спрашиваю, исходя из каких данных это должен делать скрипт/сценарий? И должен ли?
2) А. Т.е. вам нужно создать пункт, вызывающий команду. Ясно.
3) А ещё предполагает отсутствие окна консоли, от которого для такой простой команды точно никакого толку. Впрочем, есть варианты, где методы можно вызывать с пом. mshta (не без лишних тормозов, правда).
4) Папка где должна создаваться?

5

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Stoller пишет:

либо выделение нескольких файлов ПКМ в Total Commander

В этом случае проще пользоваться тулбаром/хоткеем и скриптами типа такого без лишних лазов в контекстное меню.

6 (изменено: Stoller, 2016-07-26 13:48:52)

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Flasher пишет:

исходя из каких данных это должен делать скрипт/сценарий?

Я понимаю это так, в цикле берутся данные о файлах, типа такого (я плохо знаю командный синтаксис...)  : 
cmd /c \"for /l %%i in () do , затем создаётся папка, куда и перемещаются файлы...

Flasher пишет:

предполагает отсутствие окна консоли

Это конечно желательно...

Flasher пишет:

Папка где должна создаваться?

В той же директории , где находятся выделяемые файлы

В этом случае проще пользоваться тулбаром/хоткеем и скриптами

Согласен. В TC это можно реализовать гораздо проще и по другому. Но, задача будет использоваться на разных машинах с неизвестными файловыми менеджерами...

7

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Совсем новая кнопка (15 дн.) для ТС. Попробуйте:

TOTALCMD#BAR#DATA
%ComSpec% /c echo off&&md
"%O"&for /f "usebackq delims=" %%# in (`type %WF`) do (move "%%#" "%O\"||robocopy.exe . "%O" "%%#" /mov /copyall /ia:sh /nfl /ndl /njh /njs /np /ns /nc)
syncui.dll,11
Переместить выбранные файлы в каталог|с базовым именем объекта под курсором

1

8 (изменено: Stoller, 2016-07-26 13:51:49)

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Flasher пишет:

Совсем новая кнопка (15 дн.) для ТС.

Благодарю за кнопку ! Но... Какая будет всё-таки команда в реестре для данной задачи ?

9

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Stoller
Без доп. средств в отношении системного контекстного меню это сделать не получится (разве что на PoSh). В ином случае непосредственно для ТС это можно сделать с помощью утилит TCMC или TCFS2 с вызовом пользовательской команды, записанной в полной аналогии с приведённой кнопкой или скриптом. Для Проводника же нужны решения другого характера, где придётся подключать WinAPI (тут есть примеры на AutoHotKey). Сам же я предпочитаю спецменю, где список всяких команд формируется по усмотрению.

10 (изменено: Stoller, 2016-07-26 14:07:46)

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Flasher пишет:

Stoller
Без доп. средств в отношении системного контекстного меню это сделать не получится

Жаль... Я думал что возможна аналогия, как с командой создания списка выделенных файлов из контекста :

@="cmd /c \"for /l %%i in () do @ 2>nul (>>\"list.txt\" dir/a/b \"%1\")&& exit\""

11

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Stoller
Если обратили внимание, то в моей кнопке такая методика и фигурирует, только вот чтобы перебрать выделяемый список файлов, нужен либо параметр, который его возвращает через пользовательскую команду ТС либо более мудрёная технология с API-функциями.

12 (изменено: ypppu, 2016-07-26 15:59:24)

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Но, раз возможно получение командой, списка выделенных файлов, то возможно ли извлекать из этого списка данные о каждом файле и дальнейшими командами производить с файлами манипулирование (перемещение в созданную папку) ?

13

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Stoller
Почему вдруг возник такой вопрос уже после появления приведённой кнопки?

14 (изменено: Stoller, 2016-07-26 14:39:10)

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Так тотал установлен далеко не на всех машинах... Работать придётся в проводнике...

15

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Stoller
А, вот с этого и надо было начать. Тогда советую в раздел AHK обратиться, там помогут с Проводником. Кажется, yalanne нечто схожее делал. Интерпретатор можно залить на шару, если что. Либо можно установить спецпрограмму, которая создаёт подобные пункты. Я несколько таких видел, правда не особо ковырял функционал за неимением интереса.

Не цитируйте предыдущий пост.

16 (изменено: Rumata, 2016-07-26 15:45:27)

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

пункт контекстного меню Проводника "Send to" не поможет? Одним из пунктов меню будет скрипт, реализующий требуемый функционал.

( 2 * b ) || ! ( 2 * b )

17

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Так дело не в создании пункта через реестр, а в получении списка.
Ещё вариант - макрос на QTabBar.

18

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

send to это скрытый junction-каталог в профиле пользователя

( 2 * b ) || ! ( 2 * b )

19 (изменено: Stoller, 2016-07-27 11:33:07)

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Возвращаясь к команде создания списка выделенных файлов из контекста.
Выделяем один файл - этот один файл попадает в список list.txt. Выделяем два файла, три , четыре - аналогично, все выделенные файлы попадают в список.
Почему же тогда нескольким выделенным файлом не быть скопированными ?

20

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Покажите команду.

21 (изменено: Stoller, 2016-07-27 12:58:21)

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Создаётся список всех выделенных файлов :

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\File Location]
 @="Создать список файлов"

 [HKEY_CLASSES_ROOT\*\shell\File Location\command]
 @="cmd /c \"for /l %%i in () do @ 2>nul (>>\"list.txt\" dir/a/b \"%1\")&& exit\""

22

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Тут дело в том, что каждый файл в данном случае обрабатывает отдельно. Т.е. толку от цикла for никакого. К тому же вам нужно брать имя первого файла. Всё в это и утыкается.

23 (изменено: Stoller, 2016-07-27 13:41:30)

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Если дело в имени первого файла, то  пусть у папки будет фиксированное имя, например, "Moved files"...

24

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

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

25

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

С фиксированным именем, пожалуйста.

26

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

MoveFilesToNewFolder.vbs:

With CreateObject("Scripting.FileSystemObject")
  Folder = .BuildPath(.GetAbsolutePathName(""), "Moved files")
  If Not .FolderExists(Folder) Then .CreateFolder(Folder)
End With
CreateObject("Shell.Application").NameSpace(Folder).MoveHere WScript.Arguments(0)
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\File Location]
@="Переместить файлы в папку Moved files"

[HKEY_CLASSES_ROOT\*\shell\File Location\command]
@="Wscript.exe C:\\MoveFilesToNewFolder.vbs \"%1\""

Путь в последней строке поправить на свой.

27

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Благодарю ! А без внешнего скрипта не получится, одной командой ? В этом то вся соль...

28

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Почему соль-то? На шару с сетевым диском положить и путь в reg поправить.
Куда большая соль в куче маячащих консольных окон.

29

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

В моём случае придётся копировать файл скрипта на каждый рабочий комп в разных местах города... (такая вот организация !     ) Не беда конечно, но с одной командой и однокликовым запуском файла реестра, было бы изящнее...

30

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Stoller пишет:

В моём случае придётся копировать файл скрипта на каждый рабочий комп в разных местах города...

А reg-файл копировать не придётся?
Почему не сделать командный файл, который при запуске без параметров копирует себя в SendTo?

31

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

shiz
Конечно всё решаемо и не требует обсуждения. Но если вернуться к началу разговора, то интересна реализация задачи - одной командой. Без всяких внешних добавок... Ну, если это не возможно, значит не возможно...

32

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Stoller пишет:

С фиксированным именем, пожалуйста.



Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\File Location]
@="Создать папку с файлами"

[HKEY_CLASSES_ROOT\*\shell\File Location\command]
@="cmd /v/c set \"f=Moved files\"& 2>nul md \"!f!\"& move \"%1\" \"!f!\""

33

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Фантастика ! Значит всё же возможно. Благодарю, Yury.

34

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

А где тут фантастика? Скрытые/системные файлы не переместятся.

35

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

"Фантастика", это конечно просто эмоции, мол всё же можно одной командой, одной строкой решить задачу...
А касательно перемещения системных файлов , либо скрытых - рядовому пользователю к ним прикасаться без спроса, не нужно...
И наверняка можно дополнить команду назначением соответствующих прав на манипуляции с файлами, плюс перемещать файлы с любыми атрибутами...

36 (изменено: Flasher, 2016-07-29 13:25:21)

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Так я и написал, что для фиксированного имени решаемо.
С системными - понятно. А со скрытыми дело иначе обстоит. Тот же Descript.ion - скрытый, а  пользователь хочет видеть комментарии к файлам, например.
Права тут роли не играют, это особенность команд copy/move и т.п.

37 (изменено: Stoller, 2016-07-29 12:23:19)

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Можно ведь сначала скопировать скрытые файлы, потом удалить исходные... Вот и получится перемещение...
А какие сложности при удалении скрытых файлов ?
Вроде как море инфы как это делается...
_http://www.windows-commandline.com/show-delete-hidden-files-command-prompt/
и т.п.

38

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Как перемещать вместе со скрытыми/системными я уже показывал. Сам я пару дней назад пробовал перенести в реестр, но вылез непонятный баг robocopy при вызове оттуда.
А тут писал именно о стандартных командах. Склеить xcopy и del - не проблема, но как оно сработает из реестра нужно смотреть.

39

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

OFF:
В VBS не разбираюсь, но проэкспериментировал ради интереса. Взял код из сообщения #26, сохранил его в файл с расширением vbs. Затем на значок скрипта перетащил значок другого файла. Файл куда-то смылся. Где теперь его искать?

40

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

ypppu, если верить коду, то он должен создать подпапку в текущем местоположении с именем "Moved files" и засунуть файл туда.

41

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Я тоже так думал. Но папка не создаётся. При попытке повторить действие с тем же файлом (даже в любой другой папке) выскакивает стандартное диалоговое окно Проводника "Папка уже содержит... Заменить файл?". То есть файл куда-то ушёл, но куда?

42

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

ypppu, не поленился, поставил себе, попробовал. Работает точно так как я описал. Допиши в vbs строчку.

msgbox folder

43 (изменено: ypppu, 2017-04-07 14:44:37)

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

mozers, спасибо, нашёл где папка создаётся: C:\Documents and Settings\user_name\Moved files. Когда добавил запись в реестр, папка стала создаваться в текущем местоположении.

Правда из корня диска не хочет работать - вылезает ошибка

Windows Script Host пишет:

Сценарий: C:\MoveFilesToNewFolder.vbs
Строка: 5
Символ: 1
Ошибка: Требуется объект: 'CreateObject(...).NameSpace(...)'
Код: 800A01A8
Источник: Ошибка выполнения Microsoft VBScript

44

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

ypppu, ну это просто недоработка предложенного скрипта. А надо то всего заменить 2ю строчку на эту:

  Folder = CreateObject("Scripting.FileSystemObject").BuildPath(.GetAbsolutePathName(""), "Moved files")

45

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

ypppu пишет:

Когда добавил запись в реестр, папка стала создаваться в текущем местоположении.

Так в этом и смысл. Одно без другого не годится.

mozers
Ага. Поправил у себя. Только ты сам недоглядел, вставив метод без объекта. Плюс в активной папке подразумевается создание, поэтому моя форма верна, и отделаться лишь присвоением тут нельзя.

46

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Файлы URL не хотят переноситься. LNK переносится некорректно: первый раз почему-то вылезает окно программы 7zip, на второй раз перенос срабатывает, но переносится не сам ярлык, а объект, на который он ссылается. При этом новая папка создаётся по месту нахождения объекта.
Папки скрипт вообще не переносит?

47

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Проблема в том, что в качестве параметра система возвращает путь к объекту, прописанный в lnk.
Для URL вроде бы нужна своя настройка, чтобы пункт появился. У меня на 7-ке его нет.
Папки скрипт переносит без проблем.

48

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Flasher пишет:

Только ты сам недоглядел, вставив метод без объекта.

А посмотреть внимательнее и проверить в работе не пробовал? Сразу строчить? Куда же так спешить?

И вообще в заголовке темы значится "CMD/BAT" так давайте будем в этом ракурсе и держаться.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\File Location]
@="Переместить файлы в папку Moved files"

[HKEY_CLASSES_ROOT\*\shell\File Location\command]
@="cmd /k echo d|xcopy /i /h /c \"%L\" MoveFiles && del /q \"%L\""

Данный вариант проверен на Win7,10 и файлы *.lnk и *.url переносит без проблем.

Flasher пишет:

Папки скрипт переносит без проблем.

При выделении папок, пункт "Переместить файлы в папку Moved files" в контекстном меню не появится.

49

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

mozers пишет:

А посмотреть внимательнее и проверить в работе не пробовал? Сразу строчить? Куда же так спешить?

Кое-кому самому проверить вместо "сразу строчить" не помешает. Невозможна работа подобных записей:
Var = CreateObject("ProgID").егоМетод1(.егоМетод2). Ни в какой документации ничего подобного никогда не встречал, а старые эксперименты давали, естественно, отрицательный результат, ибо иначе был просто нонсенс.

Ошибка:	Неверная или неквалифицированная ссылка
Код:	800A01F9
Источник: 	Ошибка выполнения Microsoft VBScript
mozers пишет:

так давайте будем в этом ракурсе и держаться.

Тема старая и поднята по причине vbs. С какой стати нужно держаться грубого варианта с мелькающими окнами? Это прихоть ТС и только.

mozers пишет:

При выделении папок, пункт "Переместить файлы в папку Moved files" в контекстном меню не появится.

Появится. Мы отсюда пришли.

50 (изменено: mozers, 2017-04-08 14:44:36)

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

Flasher
Извини, дорогой, чет меня закоротило (посчитал GetAbsolutePathName методом Shell.Application). Неправ. Посыпаю голову пеплом.
В качестве компенсации за моральный ущерб предлагаю заставить твой скрипт перемещать .lnk и .url. Всего то надо исправить в reg-файликах %1 на %L.
Но вот только одновременное перемещение выделенных файлов и папок, увы, невозможно.

51

Re: CMD/BAT: Перемещение выделенных файлов командой из контекстного меню

mozers
Гуд. Компенсация принята. Опробуем. Забыл про %L, хотя когда-то пользовался.