|
众所周知,修改注册表,可实现右键菜单或者双击文件执行一个命令
例如
[HKEY_CLASSES_ROOT\inifile\shell\open\command]
@="\"Notepad.exe\" \"%1\""
可实现双击inifile(*.ini)时执行 "Notepad.exe 双击的文件的完整路径",即:将 双击的文件的完整路径 作为参数运行 Notepad.exe,效果就是Notepad.exe打开了 双击的文件
如果我希望 右键菜单或者双击文件执行一段批处理脚本,该如何实现呢
简单:
[HKCR\DesktopBackground\shell\重启 Explorer\command]
@="\"C:\\somewhere\\resetexplorer.cmd\""
如果我不希望有命令行黑框闪现呢
换成mshta.exe vbscript:createobject("wscript.shell").run("some.cmd",0)(window.close)调用即可
[HKCR\DesktopBackground\shell\重启 Explorer\command]
@="mshta.exe vbscript:createobject(\"wscript.shell\").run(\"C:\\somewhere\\resetexplorer.cmd\",0)(window.close)"
如果我不希望批处理文件resetexplorer.cmd存在呢,这才是这篇帖子真正要说的,以下是示例
@echo off & setlocal ENABLEDELAYEDEXPANSION
::改造批处理脚本,双引号替换为两个双引号,改为1行,用 & 连接语句,该加括号加,该转义括号转义 ^(
set "batCmd=taskkill /f /im explorer.exe & start """" ""explorer.exe"""
::自动执行注册表所需转义
set "batCmd1=!batCmd:%%=%%%%!"
set "batCmd2=!batCmd1:""=\"\"!"
::写入注册表
Reg.exe add "HKCR\DesktopBackground\Shell\重启 Explorer\command" /ve /t REG_SZ /d "mshta.exe vbscript:createobject(\"wscript.shell\").run(\"cmd /c !batCmd2!\",0)(window.close)" /f
由于需要将需执行的批处理脚本改为1行,所以对于太过于复杂的批处理是不适合的,这种情况就老实让批处理文件存在吧
|
|