Вы должны войти, чтобы создавать сообщения и темы.

Команда с переменными в контекстном меню

Страница 1 из 2►

Доброго времени суток всем читающим!

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


К сути проблемы:
Есть задача запустить программу Robocopy с аргументами и переменными через контекстное меню.
Сама команда: Скопированоrobocopy /MOVE /E %cd% .., которая должна перемещать все файлы и папки сохраняя построение из дочерней папки в родительскую.
Если запустить её из командной строки, то всё работает так, как и было задумано (не обращайте внимания на ошибку одной папки, это та папка из которой собственно и выполняется команда). Но стоит попытаться перенести её в контекстное меню через реестр, начинаются проблемы.
Как выглядит мой ключ в реестре. В виде reg файла.
При попытке исполнения данной команды через контекстное меню выдаёт такую ошибку. Сам файл robocopy.exe находится как и в папке System32, так и в папке SysWOW64 в виде жёстких ссылок (я ничего не трогал, так всё и было).

Была принята попытка заменить команду на файл bat с таким содержанием:
Скопированоcd /d %%1
СкопированоC:\Windows\System32\Robocopy.exe /MOVE /E %cd% ..
И изменен строковый параметр "(По умолчанию)" на Скопировано"C:\Windows\123\MoveToParent.bat" "%1"
Что привело к новой ошибке.

Прочитал в интернете, что виной всему сам строковый параметр REG_SZ который не умеет распознавать переменные, вследствие чего был заменён на параметр REG_EXPAND_SZ, но без результативно.


Ещё раз напомню, что знаний в этой сфере у меня маловато, так что рассчитываю на вашу поддержку.
Буду рад любому решению проблемы (с костылями и без), лишь бы только это всё делалось в 1 клик.
Заранее спасибо.

Добрый вечер 🖐
Можете показать, какая точная команда у Вас сработала в Командной строке?

Цитата: Сергей от 25.03.2021, 22:43

Добрый вечер 🖐
Можете показать, какая точная команда у Вас сработала в Командной строке?

Добрый! Сработала команда Скопированоrobocopy /MOVE /E %cd% .. находясь в исполняемой папке (cd C:\Users\dmitry например). Синтаксис Robocopy, где Скопировано%cd% это источник (текущая папка), а Скопировано.. - назначение (каталог выше по иерархии папки).

Здравствуйте!
Есть ещё один вариант, без использования реестра.
Создаём командный файл (cmd) с таким содержимым:

@for %%f in (%*) do @move /Y %%f "%%~dpf..\"

перемещаем его в "укромное место", далее, переходим в папку СкопированоSendTo — C:\Users\ИМЯ ПОЛЬЗОВАТЕЛЯ\AppData\Roaming\Microsoft\Windows\SendTo и создаём ярлык на этот cmd-файл. Меняем имя, например: «Переместить на уровень вверх» и, в свойствах ярлыка, задаём иконку (скрин).
Теперь, при выборе файлов и папок, ПКМ в подменю «Отправить», появится возможность перемещать элементы в родительскую папку (скрин).

Известные ограничения:
Если, в родительской папке существуют одноимённые файлы и папки, то элементы из дочерней папки перемещены не будут.

Лайкнули Дима и Имир
ДимаИмир
Лучший способ помочь себе — помогать другим.
Цитата: Яр от 26.03.2021, 10:23

Здравствуйте!
Есть ещё один вариант, без использования реестра.
Создаём командный файл (cmd) с таким содержимым:

Здравствуйте.

Проверил вашу команду  @for %%f in (%*) do @move /Y %%f "%%~dpf..\", хоть она и рабочая, но требует выделения объекта(ов) для появления меню "Отправить". В идеале реализовать появление как у твика "Удалить содержимое папки" Хачатура или по пустому месту в папке, как и задумывалось ранее. Хоть и по сути проблема решена, хотелось бы узнать в чём причина ошибок, описанных мною в первом сообщении темы.

Спасибо за решение!

Добрый день! Решил эту проблему! Нужно создать cmd-файл с содержимым [robocopy /MOVE /E "%cd%" ..]. Создать reg-файл и заменить в нём путь к cmd-файлу и название пункта контекстного меню на свои. Применить. Теперь пункт должен появляться при нажатии ПКМ по пустому месту в папке. Однако, у меня всё-же остался вопрос: как выполнить то же самое, но при нажатии ПКМ по папке, не входя в неё?  

СкопированоWindows Registry Editor Version 5.00

Скопировано[HKEY_CLASSES_ROOT\Directory\Background\shell\Item0]
Скопировано"MUIVerb"="Название пункта контекстного меню"

Скопировано[HKEY_CLASSES_ROOT\Directory\Background\shell\Item0\command]
Скопировано@="Путь к cmd-файлу"

Имир, Привет.
Пропиши то же самое в ветке СкопированоHKEY_CLASSES_ROOT\Directory\shell 

Лайкнул Имир
Имир
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн
Цитата: Mikhail от 15.07.2025, 12:07

Имир, Привет.
Пропиши то же самое в ветке СкопированоHKEY_CLASSES_ROOT\Directory\shell 

Спасибо! Подскажите, пожалуйста, как удалить пункт из контекстного меню рабочего стола, но оставить его в остальных папках?

Имир, Ну удали из HKEY_CLASSES_ROOT\DesktopBackground\Shell свою запись и все.

Лайкнул Имир
Имир
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Добрый вечер. Если прописать то же самое в ветке СкопированоHKEY_CLASSES_ROOT\Directory\shell, то скрипт работает следующим образом: он извлекает содержимое не той папки, при нажатии ПКМ на которую он был запущен, а содержимое текущей папки. То есть скрипт извлекает содержимое папки, в которой вы находитесь. Есть ли способ запустить скрипт извлечения, не входя в неё?

Имир, Привет.
Напиши что тебе нужно сделать, извлечь файлы куда?, на рабочий стол?, на каталог выше и т.д.
Какой код используешь сейчас?

«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Mikhail, доброе утро. Я использую вот этот код Скопированоrobocopy /MOVE /E %cd% .., прописанный в cmd-файле. Это код извлекает содержимое текущего каталога на каталог выше, а мне нужно извлечь содержимое папки в текущий каталог.

Имир, Так? проверь:

@move "%~1\*" .
@for /d %%I in ("%~1\*") do @move "%%I" .
@rd /s /q "%~1"

Еще короче

скрипт: Скопировано@move "%~1\*" .

Лайкнул Имир
Имир
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Имир, Забыл написать, в реестре должно быть вот так Скопировано"C:\Users\Admin\Desktop\test1.cmd" "%1", путь к батнику измени на свой.

Лайкнул Имир
Имир
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн
Страница 1 из 2►