論寫bat(批處理)腳本時(shí)需要注意的點(diǎn)

引子
最近寫了一個(gè)安裝ffmpeg的bat腳本,原理就是把ffmpeg的文件復(fù)制到system32下,并詢問是否打開教程
當(dāng)你不用管理員身份運(yùn)行時(shí),運(yùn)行目錄是當(dāng)前腳本所在的目錄

但是當(dāng)你使用管理員身份運(yùn)行時(shí),就會變成System32

此時(shí)如果用 %cd% 復(fù)制文件,不可行

這時(shí)就要替換成 %~dp0 了(如果遇到空格、漢字或者其他特殊字符要用雙引號括起來)
例如
copy "%~dp0ffplay.exe" "%systemdrive%\WINDOWS\System32"
copy "%~dp0ffprobe.exe" "%systemdrive%\WINDOWS\System32"
copy "%~dp0ffmpeg.exe" "%systemdrive%\WINDOWS\System32"
成功運(yùn)行

打開網(wǎng)頁 與 快捷方式
一般來說,在cmd中可以用start就可以打開網(wǎng)頁
比如:start www.bilibili.com
但帶有url編碼的網(wǎng)頁就不行了,比如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,會被系統(tǒng)當(dāng)作變量處理(奇怪的是,在cmd直接運(yùn)行是正常的,但是放在腳本中就不正常了)
于是我想到了用快捷方式打開網(wǎng)頁
可能你知道一般的快捷方式都是.Ink文件,于是我自然地寫上了start target.Ink

但結(jié)果很殘酷

實(shí)際上,Internet快捷方式的擴(kuò)展名是 .url

于是,我又寫了一個(gè) start target.url
成了!
另外說一個(gè)也可以解決這個(gè)問題的辦法
寫一個(gè)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換成你的網(wǎng)站,然后保存文件編碼為utf-8即可
最后寫上start "%~dp0target.html"即可
(注:強(qiáng)烈建議你用雙引號把路徑括起來)
保存編碼
在保存文件時(shí),如果你使用的是Notepad++或者Vscode等文本編輯軟件,文件會默認(rèn)保存為utf-8編碼
這時(shí),畫風(fēng)就會變成這樣

所以在保存bat文件之時(shí),請更改編碼為ANSI或GB2312
如果你是Vscode用戶,點(diǎn)一下右下角的按鈕,然后選第二個(gè),最后選擇GB2312即可



if判定
當(dāng)你判斷一個(gè)變量是否為某個(gè)值字符串時(shí),不需要使用引號
如

當(dāng)用戶輸入y時(shí),腳本就會打開網(wǎng)頁
輸入n時(shí)什么都不做
(注:寫"=="時(shí)兩邊不用空格)
結(jié)語
沒什么要說的,如果這篇文章有錯(cuò)誤或者要改進(jìn)的地方,歡迎在評論區(qū)提出
感謝你的觀看!