Tips 1: %~dp0当前路径最后一个是带斜杠的

Tips 2: 变量赋值需要用双引号括起来,括里面的内容如果带双引号,那么需要连续两个,如””表示一个”(这个操作不包括前面括号变量的那对双引号),如果括里面的内容带有%,那么也要用两个%%来表示,如””%%1″”,最后到注册表里面的时候就是”%1″这样的。

Tips 3:/v为所建项的右侧名称,/ve则表示按照默认, /d为该名称对应的值, /f为强制覆盖。

AHK文件默认打开方式菜单

?

::生成ahk文件类型
@reg add hkcr\.ahk /ve /d "AutoHotKeyScript" /f>nul 2>nul
@reg add hkcr\.ahk\shellnew /v "Filename" /d "Template.ahk" /f>nul 2>nul

::生成打开菜单
@reg add hkcr\AutoHotKeyScript\shell\Open /ve /d "打开文件" /f>nul 2>nul
@reg add hkcr\AutoHotKeyScript\shell\Open\Command /ve /d """%~dp0autohotkey.exe"" ""%%1"" %%*" /f>nul 2>nul

::生成编辑菜单
@reg add hkcr\AutoHotKeyScript\shell\Edit /ve /d "编辑脚本" /f>nul 2>nul
@reg add hkcr\AutoHotKeyScript\shell\Edit\Command  /ve /d """%~dp0scite\scite.exe"" ""%%1""" /f>nul 2>nul

::生成编译菜单
@reg add hkcr\AutoHotKeyScript\shell\Complie /ve /d "编译脚本" /f>nul 2>nul
@reg add hkcr\AutoHotKeyScript\shell\Complie\Command  /ve /d """%~dp0compiler\ahk2exe"" /in  ""%%l"" %%*" /f>nul 2>nul

::生成runas菜单
@reg add hkcr\AutoHotKeyScript\shell\RunAs /v "haslasshield" /d "" /f>nul 2>nul
@reg add hkcr\AutoHotKeyScript\shell\RunAs\Command  /ve /d """%~dp0autohotkey.exe"" ""%%1"" %%*" /f>nul 2>nul

::生成shellex菜单
@reg add hkcr\AutoHotKeyScript\ShellEX\DropHandler /ve /d "{86C86720-42A0-1069-A2E8-08002B30309D}" /f>nul 2>nul

@echo off
echo 当前盘符:%~d0
echo 当前盘符和路径:%~dp0
echo 当前批处理全路径:%~f0
echo 当前盘符和路径的短文件名格式:%~sdp0
echo 当前CMD默认目录:%cd%

?

notepad 添加右键菜单

@set str1=%~dp0
@set str2=notepad++.exe
@set str3= ""%%1""
@set str4=%str1%%str2%
@set str5=%str4%%str3%


@reg add HKCR\*\shell\Notepad++ /v icon /d "%str4%"  /f  >NUL 2>NUL
@reg add HKCR\*\shell\Notepad++\command /ve  /d "%str5%"  /f  >NUL 2>NUL

?

pxc-view添加默认打开pdf文件方式

@set str1=%~dp0
@set str2=PDFXCview.exe
@set str3= ""%%1""
@set str4=,1

@reg add HKCR\.pdf /ve /d PDF-XChangeViewer.1 /f >NUL 2>NUL
@reg add HKCR\.pdf /v "Content Type" /d "application/pdf"  /f >NUL 2>NUL
@reg add HKCR\PDF-XChangeViewer.1 /ve /d "PDF-XChange Viewer Document" /f >NUL >NUL
@reg add HKCR\PDF-XChangeViewer.1\DefaultIcon /ve /d "%str1%%str2%%str4%" /f >NUL 2>NUL
@reg add HKCR\PDF-XChangeViewer.1\shell\open\command /ve /d "%str1%%str2%%str3%" /f >NUL 2>NUL

?

备注,右键菜单中采用exe内部的icongroup图标显示的话,icongroup第一个序号为0(不是1),往后依次类推。

cmd中的函数采用%函数名%这样的格式,字符串连接可以能采用 str1=%str2%str3%这样的连接方式。

避免变量中空格带来的错误,在赋值单个变量的时候可以不用双引号,在多个变量连接的时候带上双引号。

如果需要在命令中带入双引号(”),同样参照%逃逸思路,输入两个双引号就可以。

?

自建服务器激活windows或者office系列:这里可以接受输入的服务器ip地址作为变量传入cmd文件中。

@echo 请输入激活的服务器ip地址:
@set /p theip=

@slmgr /ipk BXW2K-N7JJT-TK3PJ-QYY3Y-FGDGY>nul 2>nul
@slmgr /skms %theip%>nul 2>nul
@slmgr /ato>nul 2>nul
@echo off "windows已经激活,按任意键退出"
@pause

memo: mak-key-new-2022 6QNGK-JCBF3-W3HGV-JRTWM-MY6DY

@echo 注意:此代码只适用于office2016且安装在默认位置.
@echo 请输入激活的服务器ip地址:
@set /p theip=

@cscript "C:\Program Files\Microsoft Office\Office16\ospp.vbs" /inpkey:XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99>nul 2>nul
@cscript "C:\Program Files\Microsoft Office\Office16\ospp.vbs" /sethst:%theip%>nul 2>nul
@cscript "C:\Program Files\Microsoft Office\Office16\ospp.vbs" /act>nul 2>nul
@cscript "C:\Program Files\Microsoft Office\Office16\ospp.vbs" /dstatus>nul 2>nul
@cscript "C:\Program Files\Microsoft Office\Office16\ospp.vbs" /remhst>nul 2>nul
@echo off "office2016已经激活,按任意键退出"
@echo off pause

?

设置参数提供选择实现跳转:重点是choice命令,/M为提示参数,/C为提供的选择按键,这个与上面的接受参数类似,但是这个主要是固定参数更便捷,而上面输入内容更灵活。

@choice /C 12 /M "请输入要操作的数字:1:安装菜单,2:卸载菜单"
if %errorlevel%==1 goto installme
if %errorlevel%==2 goto uninstallme

:installme
@set str1=%~dp0
@set str2=ago自用版.exe
@set str3= -f %%1
@set str4= -d %%1
@set str5= ,4


@reg add HKCR\exefile\shell\添加到aGo /v icon /d "%str1%%str2%%str5%" /f >NUL 2>NUL
@reg add HKCR\exefile\shell\添加到aGo\command /ve /d "%str1%%str2%%str3%" /f >NUL 2>NUL
@reg add HKCR\Directory\shell\添加到aGo /v icon /d "%str1%%str2%%str5%" /f >NUL 2>NUL
@reg add HKCR\Directory\shell\添加到aGo\command /ve /d "%str1%%str2%%str4%" /f >NUL 2>NUL
@exit

:uninstallme
@reg delete HKCR\exefile\shell\添加到aGo /f >NUL 2>NUL
@reg delete HKCR\Directory\shell\添加到aGo /f >NUL 2>NUL
@exit

需要注意的是:cmd文件编码建议采用ansi,采用utf-8或者utf-16的时候,在传统的cmd console下面执行的时候会出现乱码,可能会导致错误。

在上面的激活实例代码中可以添加这样的,可以实现默认ip直接回车即可。

@if “%theip%”==”” set theip=”192.168.31.1″