论写bat(批处理)脚本时需要注意的点

引子
最近写了一个安装ffmpeg的bat脚本,原理就是把ffmpeg的文件复制到system32下,并询问是否打开教程
当你不用管理员身份运行时,运行目录是当前脚本所在的目录

但是当你使用管理员身份运行时,就会变成System32

此时如果用 %cd% 复制文件,不可行

这时就要替换成 %~dp0 了(如果遇到空格、汉字或者其他特殊字符要用双引号括起来)
例如
copy "%~dp0ffplay.exe" "%systemdrive%\WINDOWS\System32"
copy "%~dp0ffprobe.exe" "%systemdrive%\WINDOWS\System32"
copy "%~dp0ffmpeg.exe" "%systemdrive%\WINDOWS\System32"
成功运行

打开网页 与 快捷方式
一般来说,在cmd中可以用start就可以打开网页
比如:start www.bilibili.com
但带有url编码的网页就不行了,比如https://hsz75.github.io/passage/%E8%AE%BAcmd%E9%9C%80%E8%A6%81%E6%B3%A8%E6%84%8F%E7%9A%84%E7%82%B9.md,会被系统当作变量处理(奇怪的是,在cmd直接运行是正常的,但是放在脚本中就不正常了)
于是我想到了用快捷方式打开网页
可能你知道一般的快捷方式都是.Ink文件,于是我自然地写上了start target.Ink

但结果很残酷

实际上,Internet快捷方式的扩展名是 .url

于是,我又写了一个 start target.url
成了!
另外说一个也可以解决这个问题的办法
写一个html文件命名为"target.html",然后再里面放上这样的代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script>
window.location.href="https://example.com";
</script>
</body>
</html>
把其中的https://example.com换成你的网站,然后保存文件编码为utf-8即可
最后写上start "%~dp0target.html"即可
(注:强烈建议你用双引号把路径括起来)
保存编码
在保存文件时,如果你使用的是Notepad++或者Vscode等文本编辑软件,文件会默认保存为utf-8编码
这时,画风就会变成这样

所以在保存bat文件之时,请更改编码为ANSI或GB2312
如果你是Vscode用户,点一下右下角的按钮,然后选第二个,最后选择GB2312即可



if判定
当你判断一个变量是否为某个值字符串时,不需要使用引号
如

当用户输入y时,脚本就会打开网页
输入n时什么都不做
(注:写"=="时两边不用空格)
结语
没什么要说的,如果这篇文章有错误或者要改进的地方,欢迎在评论区提出
感谢你的观看!