使用 Windows Terminal (1)
Contents
安装 Windows Terminal
在 Windows 10
的应用商店中,搜索 Windows terminal
,然后有一个叫做 Windows terminal (Preview)
的程序。安装即可。
启动的话,开始菜单里面可以直接找到 Windows terminal (Preview)
这个工具。或者 Win + R
运行 wt
(gcm wt
/ Get-Command wt
可以看到它的位置,是C:\Users\UserName\AppData\Local\Microsoft\WindowsApps\wt.exe
)
PS C:\Users\UserName> gcm wt
CommandType Name Version Source
----------- ---- ------- ------
Application wt.exe 0.0.0.0 C:\Users\UserName\AppData\Local\Microsoft\WindowsApps\wt.exe
添加到右键菜单
在任意文件夹下,按着 Shift
鼠标右键,有 在此处打开Powershell/命令行/cmd/命令提示符
的选项。那么,如何把 Windows Terminal
添加到右键菜单呢?
注册表添加项目
注册表 计算机\HKEY_CLASSES_ROOT\Directory\Background\shell
这个位置中,存储了文件夹右键所有项目的信息。之后新建一个项,比如叫做term
(随意,但是不能和已有的冲突),之后在这个项下面再新建一个项 command
。双击 command
右侧的 (默认)
项,将上面 wt
的位置粘贴过去。这个时候,切换到比如桌面,然后右键找到 Windows terminal
菜单,如果没有问题的话,应该是可以打开了。(位置不是当前目录没事,后面会设置)
如果需要更改显示的名称,比如 cmd - Windows Terminal
powershell - Windows Terminal
,在 Shell
下的开始创建的 term
的右侧更改 (默认)
的值,比如改成 PowerShell - Windows Terminal
。
默认隐藏,按着Shift 加载
在 term
项右侧,新建一个字符串值,名称为 Extended
,值不需要填,之后换到桌面,再试一下,应该是已经隐藏了。然后按着 Shift 右键,可以显示出来。
设置图标
在 term
项右侧,新建一个字符串值,名称为 Icon
,值填写一个图标的地址,例如 %USERPROFILE%\AppData\Local\terminal\wt_32.ico
(这个是自己创建的)
之后右键这一项就有图标了。
从当前位置运行
编辑 Windows Terminal
的配置项(程序标题栏有倒 ^ 的一个按钮,里面有 Settings
设置)
在 profiles
找到默认运行的 Shell
节点,向这里面添加一项
"startingDirectory": null
取消运行目录的设置。
这个时候,再试一下运行 wt
(比如从资源管理器地址栏或者右键运行),会以当前目录打开。
除了右键菜单,在 资源管理器/explorer
下,Ctrl+L
编辑任务栏直接输入 wt
就可以打开 Windows Terminal
添加 UAC 权限运行
之前有一种cmd脚本,是自动申请以UAC权限运行。代码如下
@echo off
rem echo 获取Administrator权限
cacls.exe "%SystemDrive%\System Volume Information" >nul 2>nul
if %errorlevel%==0 goto Admin
if exist "%temp%\getadmin.vbs" del /f /q "%temp%\getadmin.vbs"
echo Set RequestUAC = CreateObject^("Shell.Application"^)>"%temp%\getadmin.vbs"
echo RequestUAC.ShellExecute "%~s0","","","runas",1 >>"%temp%\getadmin.vbs"
echo WScript.Quit >>"%temp%\getadmin.vbs"
"%temp%\getadmin.vbs" /f
if exist "%temp%\getadmin.vbs" del /f /q "%temp%\getadmin.vbs"
exit
:Admin
echo 成功取得Administrator权限
阅读代码可以看到其原理,实际上是调用了一段 vbs,通过 vbs 运行,VBS 代码如下
Set RequestUAC = CreateObject("Shell.Application")
RequestUAC.ShellExecute "%~s0","","","runas",1
WScript.Quit
即创建一个 Shell.Application
的对象,然后 RequestUAC.ShellExecute
运行自身,之后退出。这个运行的时候,是请求 UAC 运行的
按照同样的原理,写入下一个脚本(具体思路可以往下看,如果不想看可以跳过)
Set RequestUAC = CreateObject("Shell.Application")
currentpath = createobject("Scripting.FileSystemObject").GetFolder(".").Path
RequestUAC.ShellExecute "cmd.exe","/c start wt.exe cmd /k cd /d" + currentpath, ,"runas",0
WScript.Quit
思路:首先直接改代码,写成这样
Set RequestUAC = CreateObject("Shell.Application")
RequestUAC.ShellExecute "wt.exe", , ,"runas",1
WScript.Quit
双击运行,发现提示错误。
C:\Users\UserName\AppData\Local\Microsoft\WindowsApps\wt.exe
系统无法访问此文件。
而 Win+R
或者在 cmd
里面运行 wt
是可以的,考虑这种情况,代码改成
Set RequestUAC = CreateObject("Shell.Application")
RequestUAC.ShellExecute "cmd.exe","/c wt.exe", ,"runas",1
WScript.Quit
现在运行 1.vbs 可以打开了,但是打开的 Terminal 位置又不对了…而且cmd的黑框还是会有的。先解决黑框的问题,换成start wt.exe
Set RequestUAC = CreateObject("Shell.Application")
RequestUAC.ShellExecute "cmd.exe","/c start wt.exe", ,"runas",1
WScript.Quit
现在cmd是一闪而过自己关闭了。然后更改 ShellExecute
的参数,1改成0,隐藏了 cmd 窗口
Set RequestUAC = CreateObject("Shell.Application")
RequestUAC.ShellExecute "cmd.exe","/c start wt.exe", ,"runas",0
WScript.Quit
之后解决路径问题,由于 cmd.exe
(第一次启动的 cmd 的位置就不正确,是 system32),因此考虑再进一步让 wt.exe 去改变目录, powershell 没有找到如何运行的时候同时执行代码,所以又改成了再次运行 cmd
即最终的命令是这个
cmd.exe /c start wt.exe cmd /k cd /d {direction}
写到 vbs 里面,首先拿 currentPath 存储一下位置,之后加到命令上面,成了这样
Set RequestUAC = CreateObject("Shell.Application")
currentpath = createobject("Scripting.FileSystemObject").GetFolder(".").Path
RequestUAC.ShellExecute "cmd.exe","/c start wt.exe cmd /k cd /d" + currentpath,"runas",0
WScript.Quit
现在这个 vbs 可以在运行目录打开 Windows Terminal
了
运行更多的shell
和上面 创建 Term
的方法一样,创建其他项目即可。最后给 wt.exe
加上一个要运行的程序
我默认的是 powershell
,所以又添加了 cmd
和 bash
C:\Users\UserName\AppData\Local\Microsoft\WindowsApps\wt.exe cmd
C:\Users\UserName\AppData\Local\Microsoft\WindowsApps\wt.exe bash
注册表样例
不保证直接导入是否会有问题,首先更改里面的 UserName
为自己账户名
直接启动 wt
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\wt powershell]
@="powershell - Windows terminal"
"Icon"="%USERPROFILE%\\AppData\\Local\\terminal\\wt_32.ico"
[HKEY_CLASSES_ROOT\Directory\Background\shell\wt powershell\command]
@="C:\\Users\\UserName\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe"
运行其他 shell
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\wt powershell]
@="powershell - Windows terminal"
"Icon"="%USERPROFILE%\\AppData\\Local\\terminal\\wt_32.ico"
[HKEY_CLASSES_ROOT\Directory\Background\shell\wt powershell\command]
@="C:\\Users\\UserName\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe powershell"
UAC 运行 cmd
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\wt cmd uac]
@="cmd(UAC) - Windows terminal"
"Icon"="%USERPROFILE%\\AppData\\Local\\terminal\\wt_32.ico"
[HKEY_CLASSES_ROOT\Directory\Background\shell\wt cmd uac\command]
@="C:\\Windows\\System32\\wscript.exe C:\\Users\\UserName\\AppData\\Local\\terminal\\runwt.vbs"
其中 runwt.vbs 的内容是
Set RequestUAC = CreateObject("Shell.Application")
currentpath = createobject("Scripting.FileSystemObject").GetFolder(".").Path
RequestUAC.ShellExecute "cmd.exe","/c start wt.exe cmd /k cd /d" + currentpath,"runas",0
WScript.Quit
VBS参考
ShellExecute
currentPath