15

У меня есть несколько программ, которые создают временные файлы или файлы резервных копий или аналогичные файлы, которые не важны. Например, GVim для Windows по умолчанию создает файл резервной копии в filename.txt~ .

Иногда мне нужно очистить каталог и удалить все эти файлы. Я сделал простой файл .bat для этого. Тем не менее, это громоздко, чтобы запустить CMD, перейти к папке, запустить скрипт. Тем более, что это скрипт, который я хотел бы часто запускать в разных папках. И я не хочу копировать скрипт в несколько папок, так как это будет кошмар обслуживания.

Итак, я подумал, что лучшим решением будет добавить пункт меню «Правый клик», который позволит мне запустить скрипт. Чтобы я мог щелкнуть правой кнопкой мыши папку в Проводнике и выбрать Очистить, а затем запустить мой сценарий в этой папке.

Итак, мой вопрос: как добавить правое меню, которое запускает пользовательский пакетный скрипт?

4 ответа4

14

Я пробовал на Windows XP SP3 с этим ключом .reg. На данный момент у вас нет Windows 7, чтобы проверить его должным образом, но он должен быть почти таким же.

  1. Откройте блокнот и вставьте код снизу.
  2. Отредактируйте согласно вашей потребности.
  3. Сохранить как MyScript1.reg
  4. Дважды щелкните, чтобы импортировать в реестр.
  5. Тест правой кнопкой мыши на любом каталоге в проводнике
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\MyScript1]
@="Execute MyScript1"

[HKEY_CLASSES_ROOT\Directory\shell\MyScript1\command]
@="\"C:\\MyScriptsDirectory\\MyScript1Directory\\MyScript1.bat\" \"%1\""
12

На самом деле, текущий ответ не устарел. Я попробовал то же самое в Windows 10 и смог добавить Run Batch script в контекстное меню всех папок в Windows.

Это содержимое моего пакетного скрипта (не будет работать с путями UNC):

@ECHO OFF
ECHO %~n0 was called with the following arguments:
SET args=%*
IF NOT DEFINED args GOTO END
ECHO %*
:END
PAUSE

Изменения реестра, которые я сделал, могут быть скопированы с этим файлом REG:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Run Batch script]
@="&Run Batch script"

[HKEY_CLASSES_ROOT\Directory\shell\Run Batch script\command]
@="\"H:\\BATCH_FILE_PATH\\context-batch.bat\" \"%1\""

Это только добавляет пункт контекстного меню для всех каталогов / папок в Windows. Если вы хотите, чтобы он отображался для каждого файла, вы можете использовать это:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\Run script]
@="Run &script"

[HKEY_CLASSES_ROOT\*\shell\Run script\command]
@="\"H:\\BATCH_FILE_PATH\\context-batch.bat\" \"%1\""

Кроме того, вы можете добавить свой пакетный сценарий в список элементов « Send To », создав ярлык для своего пакетного сценария и поместив его в папку %APPDATA%\Microsoft\Windows\SendTo (или введите shell:sendto в адресную строку).

Если вы хотите, чтобы ваш скрипт отображался в контекстном меню, которое появляется при щелчке правой кнопкой мыши по пустому пространству в каталоге (фон каталога?) Вы можете использовать следующий файл REG:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\Run Batch script]
@="&Run Batch script"
"Icon"="%SystemRoot%\\System32\\shell32.dll,71"

[HKEY_CLASSES_ROOT\Directory\Background\shell\Run Batch script\command]
@="H:\\BATCH_FILE_PATH\\context-batch.bat \"%V\""

Вам не нужна строка "Icon"="%SystemRoot%\\System32\\shell32.dll,71" . Он просто добавляет значок в ваше контекстное меню, которое выглядит следующим образом:

окна контекстного меню

2

Я бы порекомендовал редактор программ по умолчанию для этой задачи. Это удобнее и безопаснее, чем редактирование реестра напрямую.

Выберите контекстное меню

Выберите расширение, которое вы хотите изменить.

Выберите Добавить ...

Дайте вашей команде заголовок, перейдите к командному файлу и при необходимости выберите значок для представления вашей команды.

Сохраните контекстное меню в реестре, и все готово.

0

@Vinayak,

При использовании параметра "отправить" вам, вероятно, потребуется добавить строку cd /d %1 в начало пакетной команды, чтобы она выполнялась по целевому пути.

мой текущий командный файл выглядит так:

@echo off
set targetfolder=%1
cd /d %1

del *.txt
pause

не уверен, что мне нужна там "set targetfolder =% 1", но она работает, поэтому я продолжаю в том же духе :)

Спасибо за помощь, я случайно наткнулся на это через Google в нужный момент :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .