cmd choice命令

帮助文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
C:\Users\lan>choice /?

CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

描述:
该工具允许用户从选择列表选择一个项目并返回所选项目的索引。

参数列表:
/C choices 指定要创建的选项列表。默认列表是 "YN"

/N 在提示符中隐藏选项列表。提示前面的消息得到显示,
选项依旧处于启用状态。

/CS 允许选择分大小写的选项。在默认情况下,这个工具
是不分大小写的。

/T timeout 做出默认选择之前,暂停的秒数。可接受的值是从 0
9999。如果指定了 0,就不会有暂停,默认选项
会得到选择。

/D choice 在 nnnn 秒之后指定默认选项。字符必须在用 /C 选
项指定的一组选择中; 同时,必须用 /T 指定 nnnn。

/M text 指定提示之前要显示的消息。如果没有指定,工具只
显示提示。

/? 显示此帮助消息。

注意:
ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选
择返回 1,第二个选择返回 2,等等。如果用户按的键不是有效的选择,
该工具会发出警告响声。如果该工具检测到错误状态,它会返回 255
ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键,该工具会返回 0
的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时,将参数降
序排列。

示例:
CHOICE /?
CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"
CHOICE /T 10 /C ync /CS /D y
CHOICE /C ab /M "选项 1 请选择 a,选项 2 请选择 b。"
CHOICE /C ab /N /M "选项 1 请选择 a,选项 2 请选择 b。"

choice命令的 选项

/c参数用来指定choice命令的选项
例如:

1
choice /c:abc

则有a,b,c三个选项,运行效果如下所示:

1
2
G:\Desktop\Vscode测试>choice /c:abc
[A,B,C]?

隐藏choice命令的 输出

1
choice /c:abc /n

虽然输出的信息隐藏了,但是还是要输入选项的,运行效果:

1
2
3
4
G:\Desktop\Vscode测试>choice /c:abc /n
A

G:\Desktop\Vscode测试>

choice命令的 提示信息

/m参数用来指定choice命令的提示信息,例如:

1
choice /c:abc /m 输入你的选择

运行效果:

1
2
E:\Blog\blog\source\_posts\Windows\CMD 批处理\语法\系统相关命令>choice /c:abc /m 输入你的选择
输入你的选择 [A,B,C]?

choice命令的 选项 区分大小写

choice命令默认不区分大小写,如果加上/CS参数,则选项区分大小写,并且在输入选项的时候,用户是不可以按shift+字母来输入大写的,只能单独输入小写,例如:

1
choice /c:abc /m 输入你的选择 /cs

运行效果如下:

1
2
3
4
E:\Blog\blog\source\_posts\Windows\CMD 批处理\语法\系统相关命令>choice /c:abc /m 输入你的选择
输入你的选择 [A,B,C]?
E:\Blog\blog\source\_posts\Windows\CMD 批处理\语法\系统相关命令>choice /c:abc /m 输入你的选择 /cs
输入你的选择 [a,b,c]?a

choice命令的 返回值

choice命令的返回值保存在变量errorlevel中,例如如下的choice命令

1
choice /c:abc
  • 如果选择的是a,则返回1
  • 如果选择的是b,则返回2
  • 如果选择的是c,则返回3
  • 以此类推

控制语句

利用choice命令的返回值我们可以做一些分支程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@echo off
choice /c:abc /M 输入选择
if errorlevel 3 goto c
REM 应先判断数值最高的错误码
if errorlevel 2 goto b
if errorlevel 1 goto a

:c
echo 进入程序段c
pause
goto end

:b
echo 进入程序段b
pause
goto end

:a
echo 进入程序段a
pause

:end
echo 程序结束

延时

choice命令还可以完成倒计时的功能,这个需要同时使用/c,/t,/d,三个参数,

  • /c指定有哪些选项,当然/c参数可以省略,如果省略,则默认的选项是Y和N
  • /t参数指定等待的时间
  • /d参数指定超时的时候的默认的选项,这个选项必须在/c指定的选项中.如果省略的/c参数,则/d参数只能是Y或者N

多选项延时

1
choice /c abc /t 2 /d a

程序 多选项延时分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off
choice /c:abc /M 输入选择 /t 5 /d c

IF ERRORLEVEL 3 (
goto c
)
IF ERRORLEVEL 2 (
goto b
)
IF ERRORLEVEL 1 (
GOTO a
)

:c
echo 你选择c
goto end
:b
echo 你选择b
goto end
:a
echo 你选择a
goto end
:end
pause

刚开始程序的运行效果如下:

1
2
G:\Desktop\Vscode测试>Delay.bat
输入选择 [A,B,C]?

现在什么都不要输入,程序将会延时五秒,然后程序会自动选择/d指定的选项,也就c选项:

1
2
3
4
G:\Desktop\Vscode测试>Delay.bat
输入选择 [A,B,C]?C
你选择c
请按任意键继续. . .

默认延时

上面已经说过,如果省略/c则/d后面只能指定y或者n,与上面类似

1
choice /t 秒数 /d [Y,N]

例如延时5秒:

1
choice /t 5 /d y

程序 两个选项的延时控制

1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
choice /t 5 /d n /m 是否进行下一步(默认:n)
IF ERRORLEVEL 2 (
goto n
)
:n
echo 你选择N
goto end
:y
echo 你选择Y
goto end
:end
echo 程序结束

运行结果:

1
2
3
4
G:\Desktop\Vscode测试>Delay2.bat
是否进行下一步(默认:n) [Y,N]?N
你选择N
程序结束

taskill命令帮助文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
TASKKILL [/S system [/U username [/P [password]]]]
{ [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]
描述:
使用该工具按照进程 ID (PID) 或映像名称终止任务。
参数列表:
/S system 指定要连接的远程系统。
/U [domain\]user 指定应该在哪个用户上下文执行这个命令。
/P [password] 为提供的用户上下文指定密码。如果忽略,提示
输入。
/FI filter 应用筛选器以选择一组任务。
允许使用 "*"。例如,映像名称 eq acme*
/PID processid 指定要终止的进程的 PID。
使用 TaskList 取得 PID。
/IM imagename 指定要终止的进程的映像名称。通配符 '*'可用来
指定所有任务或映像名称。
/T 终止指定的进程和由它启用的子进程。
/F 指定强制终止进程。
/? 显示帮助消息。
筛选器:
筛选器名 有效运算符 有效值
----------- --------------- -------------------------
STATUS eq, ne RUNNING |
NOT RESPONDING | UNKNOWN
IMAGENAME eq, ne 映像名称
PID eq, ne, gt, lt, ge, le PID 值
SESSION eq, ne, gt, lt, ge, le 会话编号。
CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为
hh:mm:ss
hh - 时,
mm - 分,ss - 秒
MEMUSAGE eq, ne, gt, lt, ge, le 内存使用量,单位为 KB
USERNAME eq, ne 用户名,格式为 [domain\]user
MODULES eq, ne DLL 名称
SERVICES eq, ne 服务名称
WINDOWTITLE eq, ne 窗口标题
说明
----
1) 只有在应用筛选器的情况下,/IM 切换才能使用通配符 '*'。
2) 远程进程总是要强行 (/F) 终止。
3) 当指定远程机器时,不支持 "WINDOWTITLE" 和 "STATUS" 筛选器。
例如:
TASKKILL /IM notepad.exe
TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
TASKKILL /F /IM cmd.exe /T
TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
TASKKILL /S system /U 域\用户名 /FI "用户名 ne NT*" /IM *
TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"

根据进程名杀进程

例如:

1
taskkill /im notepad.exe

根据pid杀死进程

查找pid

例如杀死窗口标题为hexo的cmd进程:
查找进程的pid:

1
tasklist /v /fo csv | findstr /i "hexo"

查询结果:

1
2
E:\Blog\JavaReadingNotes>tasklist /v /fo csv | findstr /i "hexo"
"cmd.exe","11952","Console","2","4,672 K","Running","DESKTOP-8ISAT6B\lan","0:00:00","hexo"

然后输入:

1
taskkill /pid 11952

这样就把hexo服务所在的的cmd进程杀死了,效果:

1
2
E:\Blog\JavaReadingNotes>taskkill /pid 11952
成功: 给进程发送了终止信号,进程的 PID 为 11952。

杀死进程树 杀死进程及其后代

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
G:\dev2\idea_workspace\MyJavaTools\runable>jps -m
17300 Jps -m
16376 RemoteMavenServer36
4648
10268 AdbTools.jar
10460 OpenScrcpy 75aed56d OppoUSB
6940 AdbTools.jar

G:\dev2\idea_workspace\MyJavaTools\runable>taskkill -f -t -pid 10460
成功: 已终止 PID 16180 (属于 PID 16820 子进程)的进程。
成功: 已终止 PID 2288 (属于 PID 16352 子进程)的进程。
成功: 已终止 PID 16820 (属于 PID 16352 子进程)的进程。
成功: 已终止 PID 16360 (属于 PID 10460 子进程)的进程。
成功: 已终止 PID 16352 (属于 PID 10460 子进程)的进程。
成功: 已终止 PID 10460 (属于 PID 4648 子进程)的进程。

G:\dev2\idea_workspace\MyJavaTools\runable>

参考资料

https://www.yiibai.com/batch_script/batch_script_process.html

tasklist命令帮助文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
TASKLIST [/S system [/U username [/P [password]]]]
[/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]
描述:
该工具显示在本地或远程机器上当前运行的进程列表。
参数列表:
/S system 指定连接到的远程系统。
/U [domain\]user 指定应该在哪个用户上下文执行这个命令。
/P [password] 为提供的用户上下文指定密码。如果省略,则
提示输入。
/M [module] 列出当前使用所给 exe/dll 名称的所有任务。
如果没有指定模块名称,显示所有加载的模块。
/SVC 显示每个进程中主持的服务。
/APPS 显示 Microsoft Store 应用及其关联的进程。
/V 显示详细任务信息。
/FI filter 显示一系列符合筛选器
指定条件的任务。
/FO format 指定输出格式。
有效值: "TABLE"、"LIST"、"CSV"。
/NH 指定列标题不应该在输出中显示。
只对 "TABLE" 和 "CSV" 格式有效。
/? 显示此帮助消息。
筛选器:
筛选器名称 有效运算符 有效值
----------- --------------- --------------------------
STATUS eq, ne RUNNING | SUSPENDED
NOT RESPONDING | UNKNOWN
IMAGENAME eq, ne 映像名称
PID eq, ne, gt, lt, ge, le PID 值
SESSION eq, ne, gt, lt, ge, le 会话编号
SESSIONNAME eq, ne 会话名称
CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为
hh:mm:ss
hh - 小时,
mm - 分钟,ss - 秒
MEMUSAGE eq, ne, gt, lt, ge, le 内存使用(以 KB 为单位)
USERNAME eq, ne 用户名,格式为
[域\]用户
SERVICES eq, ne 服务名称
WINDOWTITLE eq, ne 窗口标题
模块 eq, ne DLL 名称
注意: 当查询远程计算机时,不支持 "WINDOWTITLE" 和 "STATUS"
筛选器。
Examples:
TASKLIST
TASKLIST /M
TASKLIST /V /FO CSV
TASKLIST /SVC /FO LIST
TASKLIST /APPS /FI "STATUS eq RUNNING"
TASKLIST /M wbem*
TASKLIST /S system /FO LIST
TASKLIST /S system /U 域\用户名 /FO CSV /NH
TASKLIST /S system /U username /P password /FO TABLE /NH
TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running"

csv输出格式

1
tasklist /v /fo csv

显示效果:

1
2
3
4
5
6
"映像名称","PID","会话名      ","会话#   ","内存使用 ","状态  ","用户名   ","CPU 时间","窗口标题    "
......
"Code.exe","1720","Console","2","114,740 K","Running","DESKTOP-8ISAT6B\lan","0:01:16","cmd tasklist命令.md - 9.3 类型通配符 - Visual Studio Code"
......
"cmd.exe","12920","Console","2","4,660 K","Running","DESKTOP-8ISAT6B\lan","0:00:00","hexo"
......

list输出格式

1
tasklist /v /fo list
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
映像名称:     System Idle Process
PID: 0
会话名 : Services
会话# : 0
内存使用 : 8 K
状态 : Unknown
用户名 : NT AUTHORITY\SYSTEM
CPU 时间: 33:34:44
窗口标题 : 暂缺

映像名称: System
PID: 4
会话名 : Services
会话# : 0
内存使用 : 4,516 K
状态 : Unknown
用户名 : 暂缺
CPU 时间: 0:23:25
窗口标题 : 暂缺

......

list输出格式会输出很长的内容.

杀死窗口标题为hexo的进程:

1
2
E:\Blog\JavaReadingNotes>taskkill /pid 12920
成功: 给进程发送了终止信号,进程的 PID 为 12920。

参考资料

https://www.yiibai.com/batch_script/batch_script_process.html

解决cmd下git log中文乱码

问题描述

cmd下输入git log命令出现如下乱码:

1
2
3
4
5
6
7
8
9
10
E:\Blog\blogRoot>git log -10 --pretty=oneline
1c26db1ef9c54330757911b5205ac92a15c01b6c (HEAD -> src) <E6>B4><E6><96><B0>todo<E9><A1><B5><E9><9D><A2>
375a4b8bfa89cad081c15d9a834f070459eb3c09 <E6>B4><E6><96><B0>todo<E9><A1><B5><E9><9D><A2>
7edcc579a0c417bb2481256da4c87cbf5a6be379 (origin/src) <E6>B4><E6><96><B0><E6><89><B9><E5><A4><84><E7><90><86><E6><96> <87><E4><BB><B6>
da64371d7c69340976265a076a161bcade7c1497 <E6>B4><E6><96><B0>todo<E9><A1><B5><E9><9D><A2>
7e108c076bbeeda63d5ada9259cb153d6ecc89b5 <E6>B4><E6><96><B0>todo<E9><A1><B5><E9><9D><A2>
c23ddcc1f4b450dedc847ecef25fa97432326e7b <E6><B7><BB><E5><8A><A0><E7>AE><E5><BD><95><E6><91><98><E8><A6><81>
78b7fb59455787fc8ac243a355dad9563ee015ab <E5><88><A0><E9><99><A4><E6><B5><8B><E8><AF><95><E6><96><87><E4><BB><B6>,<E9> <87><8D><E6><96><B0><E7><94><9F><E6><88><90><E7>AE><E5><BD><95><E6><91><98><E8><A6><81>
f00bcacf7a5fda143fd407b8959154945b4ed558 <E6><B7><BB><E5><8A><A0><E6><B5><8B><E8><AF><95><E6><96><87><E4><BB><B6> eab5cd3a59085d6ca0fed8bef9aea20b9a13d7ff <E6>B4><E6><96><B0><E6><96><87><E7><AB><A0>
15b8dea30dba4f1931b612b17e75b684bb51deba <E5><88><A0><E9><99><A4><E6><B5><8B><E8><AF><95><E6><96><87><E7><AB><A0>

解决方案

在cmd中输入如下命令:

1
2
3
4
5
git config --global core.quotepath false 
git config --global gui.encoding utf-8
git config --global i18n.commit.encoding utf-8
git config --global i18n.logoutputencoding utf-8
set LESSCHARSET=utf-8

这样git log就不会乱码了:

1
2
3
4
5
6
7
8
9
10
11
E:\Blog\blogRoot>git log -10 --pretty=oneline
1c26db1ef9c54330757911b5205ac92a15c01b6c (HEAD -> src) 更新todo页面
375a4b8bfa89cad081c15d9a834f070459eb3c09 更新todo页面
7edcc579a0c417bb2481256da4c87cbf5a6be379 (origin/src) 更新批处理文件
da64371d7c69340976265a076a161bcade7c1497 更新todo页面
7e108c076bbeeda63d5ada9259cb153d6ecc89b5 更新todo页面
c23ddcc1f4b450dedc847ecef25fa97432326e7b 添加目录摘要
78b7fb59455787fc8ac243a355dad9563ee015ab 删除测试文件,重新生成目录摘要
f00bcacf7a5fda143fd407b8959154945b4ed558 添加测试文件
eab5cd3a59085d6ca0fed8bef9aea20b9a13d7ff 更新文章
15b8dea30dba4f1931b612b17e75b684bb51deba 删除测试文章

但是,这样只对当前cmd有效,新开的cmd无效,需要再次输入:

1
set LESSCHARSET=utf-8

永久生效

设置添加环境变量LESSCHARSET,设为utf-8:
这里有一张图片

效果

这样CMD,powerShell中都不会乱码了:
这里有一张图片
Windows Terminal中的cmdPowerShell也不会乱码:
这里有一张图片

参考资料

https://blog.csdn.net/sunjinshengli/article/details/81283009

安装

Microsoft Store中下载安装即可.

配置

打开配置文件

点击Windows Terminal菜单栏上的下拉箭头,然后选择Settings:
这里有一张图片

选择默认启动的终端

默认的配置信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation
{
"$schema": "https://aka.ms/terminal-profiles-schema",
"defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"profiles":
[
{
// Make changes here to the powershell.exe profile
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"name": "Windows PowerShell",
"hidden": false
},
{
// Make changes here to the cmd.exe profile
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
"name": "cmd",
"commandline": "cmd.exe",
"hidden": false
},
{
"guid": "{c6eaf9f4-32a7-5fdc-b5cf-066e8a4b1e40}",
"hidden": false,
"name": "Ubuntu-18.04",
"source": "Windows.Terminal.Wsl"
},
{
"guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
"hidden": false,
"name": "Azure Cloud Shell",
"source": "Windows.Terminal.Azure"
}
],
// Add custom color schemes to this array
"schemes": [],
// Add any keybinding overrides to this array.
// To unbind a default keybinding, set the command to "unbound"
"keybindings":
[
// etc.
]
}

“defaultProfile”这个配置项就是打开Terminal时默认启动的程序,可以看到defaultProfile配置的guid是:

1
"defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",

这正是PowerShell的guid:

1
2
3
4
5
6
7
8
"profiles":
[
{
// Make changes here to the powershell.exe profile
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"name": "Windows PowerShell",
"hidden": false
},

所以如果想启动Terminal时打开的是cmd,只需要修改”defaultProfile”的值为cmd的guid即可:

1
2
3
0caa0dad-35be-5f56-a8ff-afceeeaa6101
//"defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"defaultProfile": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",

配置快捷键

快捷键配置项为”keybindings”,我配置如下:

1
2
3
4
5
6
7
8
"keybindings":
[
{ "command": "copy", "keys": ["ctrl+shift+c"] },
{ "command": "paste", "keys": ["ctrl+shift+v"] },
{ "command": "closePane", "keys": ["ctrl+shift+w"] },
{ "command": "newTab", "keys": ["ctrl+shift+t"] }
// etc.
]
  • 其中command为功能,例如复制(copy),粘贴(paster)
  • keys为对应的快捷键

在鼠标右键打开

下载Terminal图标

图标地址:https://raw.githubusercontent.com/microsoft/terminal/master/res/terminal.ico
下载这个图标后,保存到指定位置,我的是(“F:\软件\图标\terminal.ico”)

添加到鼠标右键

批处理修改注册表

复制下面的批处理代码,然后保存到.bat文件中,以管理员身份运行即可:

1
2
3
4
5
@echo off
reg.exe add "HKEY_CLASSES_ROOT\Directory\Background\shell\wt" /f /ve /d "Windows Terminal here"
reg.exe add "HKEY_CLASSES_ROOT\Directory\Background\shell\wt" /f /v "Icon" /t REG_EXPAND_SZ /d "F:\软件\图标\terminal.ico"
reg.exe add "HKEY_CLASSES_ROOT\Directory\Background\shell\wt\command" /f /ve /t REG_EXPAND_SZ /d "\"%%LOCALAPPDATA%%\Microsoft\WindowsApps\wt.exe\""
pause

手动修改注册表

按下Win+R快捷键打开运行,然后输入regedit打开注册表编辑器,然后在地址栏中输入:

1
HKEY_CLASSES_ROOT\Directory\Background\shell

新建:wt
然后点击wt,双击右边的默认,在里面输入鼠标右键选项的名称:Windows Terminal here
然后右键wt,选择新建字符串,名为为Icon,在里面输入下载好的图标的地址:F:\软件\图标\terminal.ico
这里有一张图片
然后右键wt,选择新建项,输入command
然后点击command,双击右边的默认,输入Terminal的地址"%%LOCALAPPDATA%%\Microsoft\WindowsApps\wt.exe\"即可
这里有一张图片

在当前目录打开

在每个终端的配置中添加"startingDirectory" : ".",这个配置即可:

1
2
3
4
5
6
7
8
9
10
11
12
"profiles":
[
//......
{
// Make changes here to the cmd.exe profile
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
"name": "cmd",
"commandline": "cmd.exe",
"startingDirectory" : ".",
"hidden": false
},
//......

完整配置示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation
{
"$schema": "https://aka.ms/terminal-profiles-schema",
// "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"defaultProfile": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
"profiles":
[
{
// Make changes here to the powershell.exe profile
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"name": "Windows PowerShell",
"hidden": false
},
{
// Make changes here to the cmd.exe profile
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
"name": "cmd",
"commandline": "cmd.exe",
// "startingDirectory" : "%USERPROFILE%",
"startingDirectory" : ".",
"hidden": false
},
{
"guid": "{c6eaf9f4-32a7-5fdc-b5cf-066e8a4b1e40}",
"hidden": false,
"name": "Ubuntu-18.04",
"source": "Windows.Terminal.Wsl"
},
{
"guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
"hidden": false,
"name": "Azure Cloud Shell",
"source": "Windows.Terminal.Azure"
}
],
// Add custom color schemes to this array
"schemes": [],
// Add any keybinding overrides to this array.
// To unbind a default keybinding, set the command to "unbound"
"keybindings":
[
{ "command": "copy", "keys": ["ctrl+shift+c"] },
{ "command": "paste", "keys": ["ctrl+shift+v"] },
{ "command": "closePane", "keys": ["ctrl+shift+w"] },
{ "command": "newTab", "keys": ["ctrl+shift+t"] }
// etc.
]
}

效果

在一个目录下按下鼠标右键,选择**Window Terminal Here**:
这里有一张图片
此时Terminal就会在当前目录下打开cmd:
这里有一张图片

参考资料

https://printempw.github.io/windows-terminal-setup-guide/
https://github.com/microsoft/terminal/blob/master/doc/user-docs/UsingJsonSettings.md

安装npm-check-updates

1
npm install -g npm-check-updates

查询是否后最新版本

在package.json所在的目录中,打开cmd,注意打开的是cmd,git-bash可能无效,输入:

1
npm-check-updates

或者使用该命令的简写:

1
ncu

该命令插件会去npm官网查询是否有最新版本,如果有新版本的话,显示效果如下:

1
2
3
4
5
6
7
8
9
10
11
E:\Blog\exam>ncu
Checking E:\Blog\exam\package.json
[====================] 15/15 100%
hexo ^3.9.0 → ^4.1.1
hexo-generator-archive ^0.1.5 → ^1.0.0
hexo-generator-category ^0.1.3 → ^1.0.0
hexo-generator-tag ^0.2.0 → ^1.0.0
hexo-renderer-ejs ^0.3.1 → ^1.0.0
hexo-renderer-stylus ^0.3.3 → ^1.1.0
hexo-server ^0.3.3 → ^1.0.0
Run ncu -u to upgrade package.json

更新依赖文件配置

按提示输入:

1
ncu -u

更新依赖配置文件即可.

1
2
3
4
5
6
7
8
9
10
11
E:\Blog\exam>ncu -u
Upgrading E:\Blog\exam\package.json
[====================] 15/15 100%
hexo ^3.9.0 → ^4.1.1
hexo-generator-archive ^0.1.5 → ^1.0.0
hexo-generator-category ^0.1.3 → ^1.0.0
hexo-generator-tag ^0.2.0 → ^1.0.0
hexo-renderer-ejs ^0.3.1 → ^1.0.0
hexo-renderer-stylus ^0.3.3 → ^1.1.0
hexo-server ^0.3.3 → ^1.0.0
Run npm install to install new versions.

更新软件

然后按提示输入:

1
npm install

更新软件版本即可

更新其他

1
2
3
4
5
6
7
8
E:\Blog\exam>npm install
npm WARN deprecated core-js@1.2.7: core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.10 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.10: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.1.2 (node_modules\hexo-fs\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.1.2 (node_modules\hexo-deployer-git\node_modules\fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
added 62 packages from 77 contributors, removed 6 packages, updated 35 packages and moved 1 package in 13.828s

注意错误信息:

1
npm WARN deprecated core-js@1.2.7: core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.

更新core-js@1.2.7到core-js@3:

1
npm install --save core-js@^3

参考资料

https://www.jianshu.com/p/f192d11b60a2
https://www.jianshu.com/p/ce9a46ae3a03
https://blog.csdn.net/Mweb_demo/article/details/100583577

使用tBodies方法

1
2
var table = document.getElementById('cal_panel');
var tbody = table.tBodies[0];

推荐使用这种方式.

通过tbody上的id属性

1
2
3
<tbody id='cal_panel_body'>
......
</tbody>

然后通过:

1
var tbody = document.getElementById('cal_panel_body');

来获取.

参考资料

https://bbs.csdn.net/topics/360143208

百度翻译音频的下载链接格式

1
https://fanyi.baidu.com/gettts?lan=en&text=单词&spd=5&source=web

其中spd表示速度,数值越大朗读越快.

示例

1
2
3
4
5
6
7
8
9
10
点击播放(omega):<i class="fa fa-play" aria-hidden="true" onclick="play('audioID5JswJWS3')"></i>

<audio src="https://fanyi.baidu.com/gettts?lan=en&text=omega&spd=5&source=web" id="audioID5JswJWS3"></audio>
<script>
function play(id){
if(id!=null){
var audio=document.getElementById(id);audio.play();
}
}
</script>

点击播放(omega):

升级

为了使用方便,我封装成如下JS方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function sst(text) {
// 创建<audio></audio>元素
var audio = document.createElement("audio");
// 设置音频地址
audio.src = "https://fanyi.baidu.com/gettts?lan=en&text=" + text + "&spd=5&source=web";
// audio.src = "https://fanyi.baidu.com/gettts?lan=en&text=omega&spd=5&source=web";
// 添加到body元素中
document.body.appendChild(audio);
console.log(audio.src);
audio.loop = false;
// 播放
audio.play();
// 监听播放结束
audio.addEventListener('ended', function () {
// alert('play ended');
// 从body元素中移除掉,以便下次使用
document.body.removeChild(audio);
}, false);
}

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<button onclick="sst('omega')">omega</button><button onclick="sst('audio')">audio</button>
<script>
function sst(text) {
// 创建<audio></audio>元素
var audio = document.createElement("audio");
// 设置音频地址
audio.src = "https://fanyi.baidu.com/gettts?lan=en&text=" + text + "&spd=5&source=web";
// audio.src = "https://fanyi.baidu.com/gettts?lan=en&text=omega&spd=5&source=web";
// 添加到body元素中
document.body.appendChild(audio);
// console.log(audio.src);
audio.loop = false;
// 播放
audio.play();
// 监听播放结束
audio.addEventListener('ended', function () {
// alert('play ended');
// 从body元素中移除掉,以便下次使用
document.body.removeChild(audio);
}, false);
}
</script>

直接document.write

1
2
3
<script language="javascript">
document.write("<script src='test.js'><\/script>");
</script>

动态改变已有script的src属性

1
2
3
4
5
<script src='' id="s1"></script>
<script language="javascript">
var scriptE=document.getElementById("s1");
scriptE.src="test.js"
</script>

动态创建script元素

1
2
3
4
5
6
7
<script>
var headDom = document.getElementsByTagName('HEAD').item(0);
var scriptDom= document.createElement("script");
scriptDom.type = "text/javascript";
scriptDom.src="test.js";
headDom.appendChild(scriptDom);
</script>

使用jQuery

使用getScript(url,callback)方法实现动态加载js文件

1
2
3
$.getScript('test.js',function(){
alert('done');
});

参考资料

https://www.jb51.net/article/17992.htm
https://www.jb51.net/article/139481.htm

问题描述

这是是hexo默认的markdown引擎与mathjax冲突造成的.

1
2
3
4
5
6
7
8
9
10
11
$$
\require{cancel}
\begin{array}{rl}
\verb|y+\cancel{x}| & y+\cancel{x}\\
\verb|\cancel{y+x}| & \cancel{y+x}\\
\verb|y+\bcancel{x}| & y+\bcancel{x}\\
\verb|y+\xcancel{x}| & y+\xcancel{x}\\
\verb|y+\cancelto{0}{x}| & y+\cancelto{0}{x}\\
\verb+\frac{1\cancel9}{\cancel95} = \frac15+& \frac{1\cancel9}{\cancel95} = \frac15 \\
\end{array}
$$

解决方案1 更换引擎

卸载原来的hexo引擎:

1
npm uninstall --save hexo-renderer-marked

使用另一个hexo引擎

1
npm install --save hexo-renderer-kramed

还需要注意的是使用\\只在多行公式内有效:
也就是要写成如下形式:

1
2
3
4
5
6
$$
\begin{align}
a &=1 & b &=2 & c &=3 \\
d &=-1 & e &=-2 & f &=-5
\end{align}
$$

显示效果:

$$
\begin{align}
a &=1 & b &=2 & c &=3 \
d &=-1 & e &=-2 & f &=-5
\end{align}
$$

行内公式是不换行的:

1
2
3
4
5
6
测试:$
\begin{align}
a &=1 & b &=2 & c &=3 \\
d &=-1 & e &=-2 & f &=-5
\end{align}
$

测试:$
\begin{align}
a &=1 & b &=2 & c &=3 \
d &=-1 & e &=-2 & f &=-5
\end{align}
$

解决方案2 使用四个反引号

也可以不卸载hexo-renderer-marked,在使用四个反引号替代LaTex的两个反引号。

  • \\\\替代原来的\\
  • \_替代原来的_,
  • \*替代原来的*
1
2
3
4
5
6
$$
\begin{aligned}
a &=1 & b &=2 & c &=3 \\\\
d &=-1 & e &=-2 & f &=-5
\end{aligned}
$$

显示效果:

$$
\begin{aligned}
a &=1 & b &=2 & c &=3 \\
d &=-1 & e &=-2 & f &=-5
\end{aligned}
$$

参考资料

https://segmentfault.com/a/1190000007261752