需要的工具

  • 翻墙
  • 谷歌搜索
  • github

直接在github上搜索

直接在github上搜索

使用谷歌搜索github上的书籍

1
site:github.com 书名.pdf

问题描述

今天看书的时候,书上讲一段代码改成另一段代码,但是由于注释也改了,代码又比较多,肉眼难以看出来到底修改了哪个地方.
想起来VScode有代码比较的功能,可以帮助我看出到底就该了哪里.
这两段代码如下:
代码段1:

1
2
3
4
5
6
7
8
9
//下面代码编译时有“ [unchecked]未经检査的转换”警告
List<String>[] lsa = new ArrayList[10];
// 将lsa向上转型为Object[]类型的变量
Object[] oa=lsa;
List<Integer> li = new ArrayList<>();
li.add(3);
oa[1] = li;
// 下面代码引起ClassCastException异常
String s = lsa[1].get(0);//①

代码段2:

1
2
3
4
5
6
7
8
9
10
11
// 下面代码实际上是不允许的
List<String>[] lsa= new ArrayList<String>[10];// 1号代码
// 将lsa向上转型为Object[]类型的变量
Object[] oa = lsa;
List<Integer> li = new ArrayList<>();
li.add(3);
// 将List<Integer>对象作为oa的第二个元素
// 下面代码也不会有任何警告,但将引发ClassCastException异常
oa[1] = li;
// 下面代码引起ClassCastException异常
String s = lsa[1].get(0); // 2号代码

使用VSCode代码比较步骤

首先,为了杜绝注释的干扰,先将所有的注释删除掉,然后用VSCode中打开一个文件夹,在该文件夹下,创建两个文件来着分别两段代码.
然后在VSCode中打开这两个文件,在左侧打开的编辑器中按下shift键选择这两个文件,然后鼠标右键选择将已选项进行比较即可:
这里有一张图片
这样就知道两个文件哪里不同了:
这里有一张图片

参考资料

https://www.cnblogs.com/dead-micky/p/8472647.html

问题描述

今天我查看之前的写的文章的时候我发现'批处理 for命令.md'这批文章中的大部分内容都丢失了,应该是我写的文件处理程序出bug造成的,不过幸好有版本控制,只要将该文件恢复到文件处理程序操作之前的状态即可.

查看某个文件的commit记录

格式:

1
git log --pretty=oneline 文件路径

例如:先cd到'批处理 for命令.md'这个文件所在的目录,然后输入如下命令,查看该文件的提交记录.

1
git log --pretty=oneline '批处理 for命令.md'
1
2
3
4
5
6
7
8
9
10
11
lan@DESKTOP-8ISAT6B MINGW64 /e/Blog/blog/source/_posts/Windows/CMD 批处理/语法/构建程序相关命令 (master)
$ git log --pretty=oneline '批处理 for命令.md'
3306a587de0ee6adcf93b06c02fcdb516b3518a8 (HEAD -> master, origin/master, origin/HEAD) 添加新的文章,添加新的批处理文件
8a373f61d04c84cae3baf38926fafb4edc7792d1 更新目录摘要
f9d10aa3896969a9b156079ff4036e08f37e48e0 添加目录摘要
ee428318f7e27468239b0df33696860fe869e1e0 删除自定义FM
65103097ba7830ba0b47b0123dd6e7abaa090299 删除原文链接
4a7e71d88ef2c2272baa3a48fc33bf4965a9b1a7 更新目录摘要
b8abfe524937e2d8f63c7fa607f6afb8812cb5d7 调整文章路径,添加新的文章

lan@DESKTOP-8ISAT6B MINGW64 /e/Blog/blog/source/_posts/Windows/CMD 批处理/语法/构建程序相关命令 (master)

比较两个版本之间文件的不同

1
git diff commit_id1 commit_id2 -- 文件名

注意这两个commit_id的顺序不同显示不同.commit_id1应该为更久远的版本,commit_id2应该为更近的版本.
所以格式简化为:

1
git diff 旧版本commit_id 新版本commit_id -- 文件名

因为我不知道什么时候文件内容丢失的,所以从最久远的版本开始,一级一级的向上比较,看看究竟是哪个版本出现的问题.

先来比较4a7e71d88e版本(倒数第二久远版本),对b8abfe5249(最久远版本)做了哪些修改:

1
git diff b8abfe5249 4a7e71d88e -- '批处理 for命令.md'

运行效果:

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
lan@DESKTOP-8ISAT6B MINGW64 /e/Blog/blog/source/_posts/Windows/CMD 批处理/语法/构建程序相关命令 (master)
$ git diff b8abfe5249 4a7e71d88e -- &#x27;批处理 for命令.md&#x27;
diff --git a/source/_posts/Windows/CMD 批处理/语法/构建程序相关命令/批处理 for命令.md b/source/_posts/Windows/CMD 批处理/语法/构建程序相关命令/批处理 for命令.md
index 11f5b2b..52811fc 100644
--- a/source/_posts/Windows/CMD 批处理/语法/构建程序相关命令/批处理 for命令.md
+++ b/source/_posts/Windows/CMD 批处理/语法/构建程序相关命令/批处理 for命令.md
@@ -6,214 +6,16 @@ categories:
- 语法
- 构建程序相关命令
date: 2019-02-01 21:57:48
-updated: 2019-11-29 21:19:58
+updated: 2019-12-09 19:45:23
abbrlink: c4029a06
---
-&lt;div id=&#x27;my_toc&#x27;&gt;
-
-- [命令格式](/blog/c4029a06/#命令格式)
- - [无参数](/blog/c4029a06/#无参数)
- - [参数 /d](/blog/c4029a06/#参数-d)
- - [参数 /R](/blog/c4029a06/#参数-R)
- - [参数 /L](/blog/c4029a06/#参数-L)
- - [参数 /F](/blog/c4029a06/#参数-F)
-- [参考资料](/blog/c4029a06/#参考资料)
-
-&lt;/div&gt;
-&lt;!--more--&gt;
-&lt;script&gt;if (navigator.platform.search(&#x27;arm&#x27;)==-1){document.getElementById(&#x27;my_toc&#x27;).style.display = &#x27;none&#x27;;}&lt;/script&gt;
+&lt;div id=&#x27;my_toc&#x27;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;/blog/c4029a06/#参考资料&quot;&gt;参考资料&lt;/a&gt;&lt;br/&gt;&lt;/div&gt;&lt;!--more--&gt;
+&lt;script&gt;if (navigator.platform.search(&#x27;arm&#x27;)==-1){document.getElementById(&#x27;my_toc&#x27;).style.display = &#x27;none&#x27;;}
+var e,p = document.getElementsByTagName(&#x27;p&#x27;);while (p.length&gt;0) {e = p[0];e.parentElement.removeChild(e);}
+&lt;/script&gt;

&lt;!--end--&gt;
-&#35;&#35; 命令格式 &#35;&#35;
-&#x60;&#x60;&#x60;cmd
-for [参数] %%变量名 in (相关文件或命令) do 执行的命令
-&#x60;&#x60;&#x60;
-对一个或一组&#x60;文件&#x60;,&#x60;字符串&#x60;或&#x60;命令结果&#x60;中的每一个对象执行特定命令,达到我们想要的结果。
-**注意**:
-- 在&#x60;批处理文件&#x60;中使用 &#x60;for&#x60; 命令时,指定变量请使用 &#x60;%%variable&#x60;,而不要用 &#x60;%variable&#x60;,而在cmd窗口中直接输入的for命令则使用&#x60;%variable&#x60;的形式。
-- 变量名称是区分大小写的,所以 &#x60;%i&#x60; 不同于 &#x60;%I&#x60;.
-
-for命令可以带参数或不带参数,带参数时支持以下参数:&#x60;/d&#x60;,&#x60;/l&#x60;,&#x60;/r&#x60;,&#x60;/f&#x60;.
-&#35;&#35;&#35; 无参数 &#35;&#35;&#35;
-......省略
-&#x60;&#x60;&#x60;
-D:\学习9\书籍\批处理&gt;for_f4.bat
-\\DESKTOP-8ISAT6B 的用户帐户
--------------------------------------------------------------------------------
+----------------------------------------------------------------------------
Administrator DefaultAccount Guest
lan WDAGUtilityAccount
命令成功完成。

可以看到就是倒数第二久远版本(4a7e71d88e)中,我的文章内容被删除掉了.所以我只要将该文件恢复到最久远版本(b8abfe5249)就可以恢复丢失的文章内容.

取出指定版本的文件

1
git checkout commitId 文件路径

现在取出最久远版本的文件’批处理 for命令.md’:

1
git checkout b8abfe5249 '批处理 for命令.md'

然后查看该文件内容:

1
cat '批处理 for命令.md'

如果需要修改,那就修改,确认无误后再:

1
2
git add .
git commit -m '恢复文件到xxxx版本'

添加到版本库中即可.

什么是Sources目录

Sources目录用来存放java文件.java项目中最常见的Sources目录就是src目录,当打包成jar时,Sources目录下的.java文件会被编译成.class文件.

什么是Resources目录

Resources目录用来存放程序需要使用的资源文件.当打包成jar时,会直接复制Resources目录下的所有文件到jar包中,也就是说Resources目录下的.java文件不会不会被编译成.class文件.
所以这个目录可以用来存放一些java模板文件,例如将各种排序算法的java文件放在其中,然后写个程序根据命令行参数,输出这里面的java模板文件。

相同点

都会被打包到jar包中.

不同点

  • Sources目录下的.java文件会被编译成.class文件.
  • Resources目录下的.java文件不会被编译.

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