小弹窗方式:
方法 1: 手动通过注册表添加
- 打开注册表编辑器:Win + R > regedit(管理员身份)。
- 导航路径:HKEY_CLASSES_ROOT\*\shell。
- 创建新项:
- 右键 shell > 新建 > 项,命名为 Change Extension。
- 右键 Change Extension > 新建 > 项,命名为 command。
- 设置值:
-
双击 Change Extension 下的 (默认),设置为 更改扩展名。
-
双击 command 下的 (默认),设置为以下完整命令(一行):
powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -Command "Add-Type -AssemblyName Microsoft.VisualBasic; $newName = [Microsoft.VisualBasic.Interaction]::InputBox('输入新文件名(包括扩展名)', '更改扩展名', (Get-Item '%1').Name); if ($newName -and $newName -ne (Get-Item '%1').Name) { Rename-Item '%1' -NewName $newName }"- 解释:
- Add-Type -AssemblyName Microsoft.VisualBasic:加载 GUI 组件。
- InputBox:弹出小窗口,标题“更改扩展名”,默认输入当前文件名。
- if 条件:仅在输入有效且不同时执行重命名,避免空操作。
- -WindowStyle Hidden:隐藏 PowerShell 控制台窗口,只显示 GUI 框。
- 解释:
-
- 可选:图标:
- 右键 Change Extension > 新建 > 字符串值,命名为 Icon,值 shell32.dll,3。
- 应用:关闭 regedit,重启资源管理器(任务管理器 > 结束“Windows 资源管理器” > 运行新任务 > explorer.exe)。
测试:右键文件 > “更改扩展名”,弹出小窗口,输入如 file.bat,确认。系统警告扩展变更,确认即可。
方法 2: 使用 .reg 文件一键导入
-
打开记事本,复制以下内容:
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\Change Extension] @="更改扩展名" "Icon"="shell32.dll,3" [HKEY_CLASSES_ROOT\*\shell\Change Extension\command] @="powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -Command \"Add-Type -AssemblyName Microsoft.VisualBasic; $newName = [Microsoft.VisualBasic.Interaction]::InputBox('输入新文件名(包括扩展名)', '更改扩展名', (Get-Item '%1').Name); if ($newName -and $newName -ne (Get-Item '%1').Name) { Rename-Item '%1' -NewName $newName }\"" -
保存为 AddChangeExtensionGUI.reg(“所有文件”类型)。
-
双击运行,确认导入。
-
重启资源管理器测试。
高级变体:仅修改扩展名的小窗口
如果只想改扩展名(保持主体名),
powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -Command "Add-Type -AssemblyName Microsoft.VisualBasic; $newName = [Microsoft.VisualBasic.Interaction]::$base = (Get-Item '%1').BaseName; $ext = [Microsoft.VisualBasic.Interaction]::InputBox('输入新扩展名(不带点,如 bat)', '更改扩展名', (Get-Item '%1').Extension.Substring(1)); if ($ext) { Rename-Item '%1' -NewName \"$base.$ext\" }
powershell弹窗方式:
在 Windows 11 右键菜单中添加“更改扩展名”选项(无需 VBS,使用 PowerShell)
基于您的要求,我们避免使用 VBS 脚本,转而采用 PowerShell 一行命令实现。点击右键选项后,会弹出命令行窗口提示您输入完整的新文件名(包括扩展名),如将 file.txt 改为 file.bat。这比直接编辑更安全,且无需外部脚本文件(纯命令行调用)。
前提:确保文件扩展名已显示(文件资源管理器 > 查看 > 显示 > 文件扩展名)。修改注册表前备份(regedit > 文件 > 导出)。
方法 1: 手动通过注册表添加(推荐,简单)
- 打开注册表编辑器:按 Win + R,输入 regedit,以管理员身份运行。
- 导航路径:转到 HKEY_CLASSES_ROOT*\shell。
- 创建新项:
- 右键 shell > 新建 > 项,命名为 Change Extension。
- 右键 Change Extension > 新建 > 项,命名为 command。
- 设置值:
-
双击 Change Extension 下的 (默认),设置为 更改扩展名(菜单显示文本)。
-
双击 command 下的 (默认),设置为:
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "Rename-Item '%1' -NewName (Read-Host '输入新文件名(包括扩展名)')"- 解释:-NoProfile 避免加载配置文件;-ExecutionPolicy Bypass 绕过执行策略;Read-Host 提示输入新名;%1 是选中的文件路径。
-
- 可选:添加图标:
- 右键 Change Extension > 新建 > 字符串值,命名为 Icon,值设为 shell32.dll,3。
- 应用:关闭 regedit,重启资源管理器(任务管理器 > 进程 > Windows 资源管理器 > 结束任务 > 文件 > 运行新任务 > explorer.exe)。
测试:右键文件 > “更改扩展名”,输入新名,回车确认。系统会警告扩展名变更,确认即可。
方法 2: 使用 .reg 文件一键导入
-
打开记事本,复制以下内容:
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\Change Extension] @="更改扩展名" "Icon"="shell32.dll,3" [HKEY_CLASSES_ROOT\*\shell\Change Extension\command] @="powershell.exe -NoProfile -ExecutionPolicy Bypass -Command \"Rename-Item '%1' -NewName (Read-Host '输入新文件名(包括扩展名)')\"" -
保存为 AddChangeExtensionNoVBS.reg(“所有文件”类型)。
-
双击运行,确认导入。
-
重启资源管理器测试。
高级变体:仅提示新扩展名(保持原文件名)
如果只想改扩展名(不改主体名),修改命令为:
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "$base = (Get-Item '%1').BaseName; $ext = Read-Host '输入新扩展名(不带点,如 bat)'; Rename-Item '%1' -NewName \"$base.$ext\""
- 这会自动取原文件名主体 + 新扩展名。替换 .reg 或注册表中的命令即可。
右键添加"打开空白文档":
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\DesktopBackground\Shell\BlankNotepad]
"MUIVerb"="打开空白记事本"
"Icon"="notepad.exe"
"Position"="Top"
[HKEY_CLASSES_ROOT\DesktopBackground\Shell\BlankNotepad\command]
@="notepad.exe"
或者 .vbs
Option Explicit
'~ On Error Resume Next
RequireAdmin
Dim objReg
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
RegWrite "HKCR\DesktopBackground\Shell\BlankNotepad", "MUIVerb", "REG_SZ", "打开空白记事本"
RegWrite "HKCR\DesktopBackground\Shell\BlankNotepad", "Icon", "REG_SZ", "notepad.exe"
RegWrite "HKCR\DesktopBackground\Shell\BlankNotepad", "Position", "REG_SZ", "Top"
RegWrite "HKCR\DesktopBackground\Shell\BlankNotepad\command", "", "REG_SZ", "notepad.exe"
Function RegWrite(reg_keyname, reg_valuename,reg_type,ByVal reg_value)
Dim aRegKey, Return
aRegKey = RegSplitKey(reg_keyname)
If IsArray(aRegKey) = 0 Then
RegWrite = 0
Exit Function
End If
Return = RegWriteKey(aRegKey)
If Return = 0 Then
RegWrite = 0
Exit Function
End If
Select Case reg_type
Case "REG_SZ"
Return = objReg.SetStringValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
Case "REG_EXPAND_SZ"
Return = objReg.SetExpandedStringValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
Case "REG_BINARY"
If IsArray(reg_value) = 0 Then reg_value = Array()
Return = objReg.SetBinaryValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
Case "REG_DWORD"
If IsNumeric(reg_value) = 0 Then reg_value = 0
Return = objReg.SetDWORDValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
Case "REG_MULTI_SZ"
If IsArray(reg_value) = 0 Then
If Len(reg_value) = 0 Then
reg_value = Array()
Else
reg_value = Array(reg_value)
End If
End If
Return = objReg.SetMultiStringValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
'Case "REG_QWORD"
'Return = oReg.SetQWORDValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
Case Else
RegWrite = 0
Exit Function
End Select
If (Return <> 0) Or (Err.Number <> 0) Then
RegWrite = 0
Exit Function
End If
RegWrite = 1
End Function
Function RegWriteKey(RegKeyName)
Dim Return
If IsArray(RegKeyName) = 0 Then
RegKeyName = RegSplitKey(RegKeyName)
End If
If (IsArray(RegKeyName) = 0) Or (UBound(RegKeyName) <> 1) Then
RegWriteKey = 0
Exit Function
End If
Return = objReg.CreateKey(RegKeyName(0),RegKeyName(1))
If (Return <> 0) Or (Err.Number <> 0) Then
RegWriteKey = 0
Exit Function
End If
RegWriteKey = 1
End Function
Function RegDelete(reg_keyname, reg_valuename)
Dim Return,aRegKey
aRegKey = RegSplitKey(reg_keyname)
If IsArray(aRegKey) = 0 Then
RegDelete = 0
Exit Function
End If
Return = objReg.DeleteValue(aRegKey(0),aRegKey(1),reg_valuename)
If (Return <> 0) And (Err.Number <> 0) Then
RegDelete = 0
Exit Function
End If
RegDelete = 1
End Function
Function RegDeleteKey(reg_keyname)
Dim Return,aRegKey
aRegKey = RegSplitKey(reg_keyname)
If IsArray(aRegKey) = 0 Then
RegDeleteKey = 0
Exit Function
End If
'On Error Resume Next
Return = RegDeleteSubKey(aRegKey(0),aRegKey(1))
'On Error Goto 0
If Return = 0 Then
RegDeleteKey = 0
Exit Function
End If
RegDeleteKey = 1
End Function
Function RegDeleteSubKey(strRegHive, strKeyPath)
Dim Return,arrSubkeys,strSubkey
objReg.EnumKey strRegHive, strKeyPath, arrSubkeys
If IsArray(arrSubkeys) <> 0 Then
For Each strSubkey In arrSubkeys
RegDeleteSubKey strRegHive, strKeyPath & "\" & strSubkey
Next
End If
Return = objReg.DeleteKey(strRegHive, strKeyPath)
If (Return <> 0) Or (Err.Number <> 0) Then
RegDeleteSubKey = 0
Exit Function
End If
RegDeleteSubKey = 1
End Function
Function RegSplitKey(RegKeyName)
Dim strHive, strInstr, strLeft
strInstr=InStr(RegKeyName,"\")
If strInstr = 0 Then Exit Function
strLeft=left(RegKeyName,strInstr-1)
Select Case strLeft
Case "HKCR","HKEY_CLASSES_ROOT" strHive = &H80000000
Case "HKCU","HKEY_CURRENT_USER" strHive = &H80000001
Case "HKLM","HKEY_LOCAL_MACHINE" strHive = &H80000002
Case "HKU","HKEY_USERS" strHive = &H80000003
Case "HKCC","HKEY_CURRENT_CONFIG" strHive = &H80000005
Case Else Exit Function
End Select
RegSplitKey = Array(strHive,Mid(RegKeyName,strInstr+1))
End Function
Function RequireAdmin()
Dim reg_valuename, WShell, Cmd, CmdLine, I
GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")_
.EnumValues &H80000003, "S-1-5-19\Environment", reg_valuename
If IsArray(reg_valuename) <> 0 Then
RequireAdmin = 1
Exit Function
End If
Set Cmd = WScript.Arguments
For I = 0 to Cmd.Count - 1
If Cmd(I) = "/admin" Then
Wscript.Echo "To script you must have administrator rights!"
'RequireAdmin = 0
'Exit Function
WScript.Quit
End If
CmdLine = CmdLine & Chr(32) & Chr(34) & Cmd(I) & Chr(34)
Next
CmdLine = CmdLine & Chr(32) & Chr(34) & "/admin" & Chr(34)
Set WShell= WScript.CreateObject( "WScript.Shell")
CreateObject("Shell.Application").ShellExecute WShell.ExpandEnvironmentStrings(_
"%SystemRoot%\System32\WScript.exe"),Chr(34) & WScript.ScriptFullName & Chr(34) & CmdLine, "", "runas"
WScript.Quit
End Function
windows11 “”我的电脑“”右键添加“控制面板”:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\ControlPanel] "Icon"="control.exe" "MUIVerb"="@shell32.dll,-4161" "Position"="Bottom"
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\ControlPanel\command] @="control.exe"
Comments