Windows: Как добавить действие пакетного скрипта в меню правого клика

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

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

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

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

6 ответов

Решение

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

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

[HKEY_CLASSES_ROOT \ Directory \ Shell\MyScript1]
@="Выполнить MyScript1"

[HKEY_CLASSES_ROOT \ Directory \ Shell \ MyScript1 команда \]
@="\"C:\\MyScriptsDirectory\\MyScript1Directory\\MyScript1.bat\" \"%1\""

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

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

@ECHO OFF
ECHO% ~ n0 был вызван со следующими аргументами:
SET args=%*
ЕСЛИ НЕ ОПРЕДЕЛЕНЫ args GOTO END
ЭХО%*:КОНЕЦ
ПАУЗА

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

Редактор реестра Windows, версия 5.00

[HKEY_CLASSES_ROOT \ Directory \ shell \ Run Batch script]
@ = "& Выполнить пакетный скрипт"

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

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

Редактор реестра Windows, версия 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, версия 5.00

[HKEY_CLASSES_ROOT \ Directory \ Background \ shell \ 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" линия. Он просто добавляет значок в ваше контекстное меню, которое выглядит следующим образом:

I would recommend http://defaultprogramseditor.com/ for this task. It is both more user friendly and arguably safer than editing the registry directly.

Choose Context Menu

Select the extension you want to change.

Choose Add...

Give your command a Title, browse to the batch file and optionally pick an icon to represent your command.

Save the context menu to the registry and you're good to go.

@Vinayak,

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

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

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

del *.txt
pause

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

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

Альтернативное решение, которое я использую в Windows 10, это добавление скрипта в одну из папок в переменной пути, а затем, когда вы находитесь в проводнике, используйте последовательность:

  • Ctrl + L - начать писать в строке поиска

  • введите: cmd, затем нажмите Enter - чтобы запустить cmd в текущем каталоге

  • запустите ваш скрипт, набрав его имя файла

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

      @echo off 

setlocal EnableExtensions
title <nul && title ..\\%~nx0
%__AppDir__%chcp.com 1252 >nul

set "_bat=%~dpnx0" & %__AppDir__%mode.com 40,02
set "_key=HKCR\Directory\shell\Set_Folder_Icon"

set "_reg_qry=%__AppDir__%reg.exe query "%_key%""
set "_ico_reg=%SystemRoot%\System32\shell32.dll,71"
set "_bat=%_bat:\=\\%" & set "_ico_reg=%_ico_reg:\=\\%"

>nul 2>&1 ( %__AppDir__%net.exe "session" && set "_adm=y" || set "_adm=n"
      %_reg_qry%|%__AppDir__%find.exe "_" && set "_reg=y" || set "_reg=n")

if /i "%_adm%|%_reg%" == "y|n" >nul 2>&1 (
    ( %__AppDir__%reg.exe add "%_key%" /ve /d "Set Folder Icon" /f
      %__AppDir__%reg.exe add "%_key%\command" /ve /d "\"%_bat%\" \"%%V\"" /f
      %__AppDir__%reg.exe add "%_key%" /v Icon /t reg_sz /d "\"%_ico_reg%\"" /f
    )&& goto %:^))else if /i "%_adm%|%_reg%" == "n|n" (set "_er=y" && goto %:^|
    )else if "%_adm%%_reg%" == "yy" (set "_er=n" && goto %:^|)else ;set "_er=n"
    
%:^)
2>nul cd/d "%~dpnx1\\." && %__AppDir__%Attrib.exe -r -a .\. || goto %:^|

if exist .\\Folder.ico (%__AppDir__%Attrib.exe -s -r -h +a .\\Folder.ico
    )else if exist .\\*.ico (for %%i in (.\\*.ico)do ren "%%~fi" Folder.ico & goto %:^/
    )else goto %:^| )

%:^/ 
if exist .\\Desktop.ini >.\\Desktop.old (
     %__AppDir__%Attrib.exe -s -r -h +a .\\Desktop.ini
     echo;[.ShellClassInfo] && echo;IconResource=Folder.ico,0
     %__AppDir__%Findstr.exe /bliv "\[\.Shell IconR IconF IconI" <.\\Desktop.ini
    )else >nul 2>&1 %__AppDir__%CertUtil.exe -decode -f "%~dpnx0" .\\Desktop.ini

if exist .\\Desktop.old >nul 2>&1 move/y .\\Desktop.old .\\Desktop.ini
        
%:^|
if "%_er%" == "y" (%__AppDir__%timeout.exe 5|echo\Admin rights required!
    )else if "%_er%" == "n" (%__AppDir__%Attrib.exe +s +r +h -a .\\Desktop.ini 
     <con: %__AppDir__%Attrib.exe -r +a .\. && %__AppDir__%Attrib.exe +r -a .\.
     <con: cd../ && %comSpec% /e:off/v:off/s/q/r "ren "%~dpnx1" "%~nx1" >nul 2>&1"
    )>nul 2>&1 else rem :: batch continue.
     
2>nul del/q /f /a "%~f1\Desktop.old" & endlocal & <con: move nul 2>&0 ||goto :eOf
::-----BEGIN -----Wy5TaGVsbENsYXNzSW5mb10gDQpJY29uUmVzb3VyY2U9LlxGb2xkZXIuaWNvLDA
NCltWaWV3U3RhdGVdDQpNb2RlPQ0KVmlkPQ0KRm9sZGVyVHlwZT1HZW5lcmljDQo=-----END -----::

Этот код учитывает:

  • Что вы собираетесь положить бат в ту папку, где он должен быть, где он всегда будет вызываться.

  • Запустится в первый раз (от имени администратора), чтобы необходимые записи в реестре Windows были добавлены (самой летучей мышью) и указали местоположение /thisFile.bat.

  • Следующие выполнения будут вызываться в меню правой кнопки мыши в целевой папке.

  • Если файл Folder.ico находится в целевой папке, он будет использоваться, в случае отсутствия будет использоваться другой файл значка, переименованный вFolder.ico

  • КогдаDesktop.iniфайл существует в целевой папке, будут внесены необходимые изменения для замены.icoфайл, если нет, будет создан новый.

  • Чтобы добавить или изменить значок папки


  • Вы также можете использовать.cmdвместо.regфайл для добавления всех записей в реестр Windows
  • Сохраните содержимое ниже как File.cmd и запустите его от имени администратора, чтобы добавить записи реестра.
      Windows Registry Editor Version 5.00 2>nul

;The following line/commands run and add the current file by "itself"
;@(cls & %__APPDIR__%reg.exe import "%~f0" >nul 2>&1 & goto=:EOF )

[HKEY_CLASSES_ROOT\Directory\shell\Set_Folder_Icon]
@="Set Folder Icon"
"Icon"="\"C:\\\\WINDOWS\\\\System32\\\\shell32.dll,71\""

[HKEY_CLASSES_ROOT\Directory\shell\Set_Folder_Icon\command]
@="\"F:\\\\2020-SU\\\\Q1635169\\\\Q1635169.cmd\" \"%V\""

; Just replace drive and folder\file name...

Обс.: Сначала ответить

Другие вопросы по тегам